如果 post 上的数组中只有一个对象,则 Foreach 错误
Foreach error if only one object in array on post
我在 nodejs 中有一个服务器,在 json 中有这个模式:
var UserSchema = new Schema({
nick: String,
deviceId: String,
visivel: Boolean,
checks: [{date: {type:String},log: {type:Number},lng: {type:Number}}]
});
在 Post 代码中我有一些东西,像这样:
.post(function(req, res){
var user = new User();
user.deviceId = req.body.deviceId;
console.log("ID: " + req.body.deviceId);
User.findOne({'deviceId': user.deviceId},'deviceId nick visivel checks',function(err, useritem){
user.nick = req.body.nick;
user.visivel = req.body.visivel;
if(req.body.checks != undefined){
req.body.checks.forEach(function(items){
console.log(items);
user.checks.push(items);
});
}
user.save(function(err){
if (err)
res.send(err);
res.json({ message: 'user save!' });
console.log('user save 1!');
})
}
}
当我用 check 数组中只有一个对象创建 post 时,服务器出现异常:
Object # has no method 'forEach'
at Promise. (/RalyAPP/server.js:268:22)
at Promise. (/RalyAPP/node_modules/mongoose/node_modules/mpromise
/lib/promise.js:162:8)
at Promise.emit (events.js:95:17)
at Promise.emit (/RalyAPP/node_modules/mongoose/node_modules/mpromise/lib/pr
omise.js:79:38)
at Promise.fulfill (/RalyAPP/node_modules/mongoose/node_modules/mpromise/lib
/promise.js:92:20)
at /RalyAPP/node_modules/mongoose/lib/query.js:1833:13
at model.Document.init (/RalyAPP/node_modules/mongoose/lib/document.js:251:1
1)
at completeOne (/RalyAPP/node_modules/mongoose/lib/query.js:1831:10)
at /RalyAPP/node_modules/mongoose/lib/query.js:1799:11
at /RalyAPP/node_modules/mongoose/lib/utils.js:414:16
但如果我用更多的 post,运行良好并且没有异常。
可以帮忙解决这个问题吗?
最佳。
也许是这样的?
if (req.body.checks !== undefined) {
if (Array.isArray(req.body.checks)) {
req.body.checks.forEach(function(items) {
console.log(items);
user.checks.push(items);
});
} else {
console.log(req.body.checks);
user.checks.push(req.body.checks);
}
}
您收到的请求包含字符串(或)json 格式的正文。您需要将其反序列化并将其转换为数组对象。 (或者)你可以简单地使用
表达#bodyParser。
如果您要发送类型为 application/json 的数据,请将其添加到 server.js、
var bodyParser = require('body-parser');
app.use( bodyParser.json() );
我在 nodejs 中有一个服务器,在 json 中有这个模式:
var UserSchema = new Schema({
nick: String,
deviceId: String,
visivel: Boolean,
checks: [{date: {type:String},log: {type:Number},lng: {type:Number}}]
});
在 Post 代码中我有一些东西,像这样:
.post(function(req, res){
var user = new User();
user.deviceId = req.body.deviceId;
console.log("ID: " + req.body.deviceId);
User.findOne({'deviceId': user.deviceId},'deviceId nick visivel checks',function(err, useritem){
user.nick = req.body.nick;
user.visivel = req.body.visivel;
if(req.body.checks != undefined){
req.body.checks.forEach(function(items){
console.log(items);
user.checks.push(items);
});
}
user.save(function(err){
if (err)
res.send(err);
res.json({ message: 'user save!' });
console.log('user save 1!');
})
}
}
当我用 check 数组中只有一个对象创建 post 时,服务器出现异常:
Object # has no method 'forEach' at Promise. (/RalyAPP/server.js:268:22) at Promise. (/RalyAPP/node_modules/mongoose/node_modules/mpromise
/lib/promise.js:162:8) at Promise.emit (events.js:95:17) at Promise.emit (/RalyAPP/node_modules/mongoose/node_modules/mpromise/lib/pr
omise.js:79:38) at Promise.fulfill (/RalyAPP/node_modules/mongoose/node_modules/mpromise/lib
/promise.js:92:20) at /RalyAPP/node_modules/mongoose/lib/query.js:1833:13 at model.Document.init (/RalyAPP/node_modules/mongoose/lib/document.js:251:1
1) at completeOne (/RalyAPP/node_modules/mongoose/lib/query.js:1831:10) at /RalyAPP/node_modules/mongoose/lib/query.js:1799:11 at /RalyAPP/node_modules/mongoose/lib/utils.js:414:16
但如果我用更多的 post,运行良好并且没有异常。
可以帮忙解决这个问题吗?
最佳。
也许是这样的?
if (req.body.checks !== undefined) {
if (Array.isArray(req.body.checks)) {
req.body.checks.forEach(function(items) {
console.log(items);
user.checks.push(items);
});
} else {
console.log(req.body.checks);
user.checks.push(req.body.checks);
}
}
您收到的请求包含字符串(或)json 格式的正文。您需要将其反序列化并将其转换为数组对象。 (或者)你可以简单地使用 表达#bodyParser。 如果您要发送类型为 application/json 的数据,请将其添加到 server.js、
var bodyParser = require('body-parser');
app.use( bodyParser.json() );