尝试将变量保存到 GeoJSON 点时出现 Mongoose CastError
Posted
技术标签:
【中文标题】尝试将变量保存到 GeoJSON 点时出现 Mongoose CastError【英文标题】:Mongoose CastError when trying to save variables to GeoJSON Point 【发布时间】:2019-05-08 15:56:19 【问题描述】:我正在尝试将新用户添加到 Mongo 数据库,包括他们的位置作为 GeoJSON 对象。我正在使用这个包为用户模式预定义一个点对象: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");
);
然后,当我使用 Postman 发送请求正文时,它会返回错误
值“类型:'点',坐标: ['12.123456', '13.134578' ] " 在路径“current_user_location”
这是请求正文的图片: Postman addUser Request Body
但是当我将路线中的“坐标”值更改为静态坐标(后面的注释,[12.123456, 13.134578])并使用 Postman 测试路线时,我得到了 OK 和新的用户已添加到数据库中。
向请求主体内的 GeoJSON 对象添加变量值是否缺少什么?
【问题讨论】:
【参考方案1】:事实证明,我输入传递的坐标的力度不够。 Schema 将它们作为字符串接收并给出错误。以下是如何修复有问题的代码行:
coordinates: [parseFloat(data.longitude), parseFloat(data.latitude)]
您必须将它们解析为浮点数(尤其是使用 GeoJSON 数据,因为 WGS84 规范说坐标扩展了 5 个小数位)
【讨论】:
以上是关于尝试将变量保存到 GeoJSON 点时出现 Mongoose CastError的主要内容,如果未能解决你的问题,请参考以下文章