将用户位置保存到mongodb,nodejs服务器

时间:2019-07-24 08:26:53

标签: javascript node.js mongodb mongoose

当我尝试找到用户的位置并将其保存到我登录的用户的位置字段中并保存到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字段中,当我登录时能看到我的实时坐标。

1 个答案:

答案 0 :(得分:0)

如果我对问题的理解正确,那么您想获取登录到您的应用程序的用户的位置。

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

要实现此目的,您可以使用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
}