【问题标题】:save user location to mongodb, nodejs server将用户位置保存到 mongodb、nodejs 服务器
【发布时间】:2019-07-24 17:32:48
【问题描述】:

当我尝试在我登录的用户的位置字段中查找用户的位置并保存到 mongodb 时,我遇到并理解问题。 对于身份验证,我使用护照。连接到nodejs并将数据保存到mongodb,一切正常。我不明白我应该怎么做才能将实时位置保存在 mongo 中用户的位置字段中。这是我的第一个 js/nodejs/databse 应用程序,我知道这不应该那么难,但我找不到我应该做什么。

我无法向您展示我尝试过的内容,因为我尝试过的唯一事情就是理解原理。 这是我的用户架构

const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true },
  date: {
    type: Date,
    default: Date.now },
  loc: {
    type: { type: String },
    coordinates: [Number]
  }
});
const User = mongoose.model('User', UserSchema);
module.exports = User;

我希望在 mongodb 用户集合中,在我登录时在 loc 字段中看到我的实时坐标。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    如果我对问题的理解正确,您希望获取登录您的应用的用户的位置。

    其中一种可能的方法是在身份验证过程中请求获得位置的许可。

    为此,您可以使用GEOLOCATION API 并首先验证浏览器是否支持,然后向用户请求坐标。

    然后,如果用户同意,那么您将位置放入第二个 POST 请求中,该请求与用于获取身份验证令牌的第一个请求一起发送。 为此,您需要创建一个新的 API 端点(此示例是用 express 编写的):

    app.post("/users/:id", async (req, res) {
       try {
          const user = await User.findById(req.params.id);
          user.loc = req.body.LOCATION_DATA_THAT_YOU_SENT_FROM_THE_FRONTEND;
          user.save();
          } catch(err) {
          console.error(err);
       }
    

    顺便说一句,如果您希望 loc 成为一个对象,那么您应该创建另一个 Mongoose 架构并从 UserSchema 中引用它:

    const LocationSchema = new mongoose.Schema({
       smthing: String,
       coords: Number    
    })
    
    // in UserSchema
    ...
    loc: {
       type: LocationSchema
    }
    

    【讨论】:

    • 路径 /users/:id 应该是路径吗?
    • 这是一个任意的路由示例。你可以想出你喜欢的任何其他路线。关键是,如果您希望数据相关,您应该向该路由发送一个发布请求,并在每次登录时更新用户的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多