尝试将变量保存到GeoJSON Point时使用Mongoose CastError

时间:2018-12-06 21:42:30

标签: node.js mongodb mongoose geojson mongoose-schema

我正在尝试将新用户添加到Mongo数据库中,包括他们作为GeoJSON对象的位置。我正在使用此程序包为用户架构预定义Point对象:https://www.npmjs.com/package/mongoose-geojson-schema

具体来说,架构如下所示:

UserSchema = mongoose.Schema(
    {
        first_name:String,
        last_name:String,
        username:String,
        avatar:String, //string to image location in server / public
        current_user_location: mongoose.Schema.Types.Point
    },
    { collection: 'users' });

var User = mongoose.model('User', UserSchema);

然后我的路线如下:

var express = require('express');
var router = express.Router();
var User = require('../models/user');
router.post('/addUser', function (req, res) {
        var data = req.body;
        new User({
          first_name:data.first_name,
          last_name:data.last_name,
          username:data.user_name,
          avatar:data.avatar_link, //string to image location in server / public
          current_user_location: {
            type: "Point",
            coordinates: [data.longitude, data.latitude] //[12.123456, 13.134578]
          }
        }).save(function (err) {
            if (err) {
                  console.log(err);
                }
            } else {
                console.log("done");
            }
     });

然后,当我使用邮递员发送请求正文时,它将返回错误

  

从点到点的值“ {类型:点”坐标失败,坐标:   ['12 .123456','13 .134578']}“位于路径“ current_user_location”

这是请求正文的图片: Postman addUser Request Body

但是,当我将路线中的“ coordinates”值更改为静态坐标(其后的注释为[12.123456,13.134578])并使用邮递员测试路线时,我得到了一个“确定”和新的用户已添加到数据库。

在请求实体内部向GeoJSON对象添加变量值时,我是否缺少某些东西?

1 个答案:

答案 0 :(得分:0)

事实证明,我输入键入的坐标还不够用。模式将它们作为字符串接收并给出错误。这是解决有问题的代码行的方法:

coordinates: [parseFloat(data.longitude), parseFloat(data.latitude)]

您必须将它们解析为一个浮点数(尤其是与GeoJSON数据有关,因为WGS84规范说坐标扩展了5个小数位)