Sye*_*ebe 6 mongodb node.js mongoose-schema
当我向子文档添加值时,在命令提示符中它显示了
诸如 cannot read property 之类的错误push。我该如何解决这个问题?
在my schema code这些的帮助下,我为父架构提供了值,
但我无法为该子文档提供值:
var venueSchema = new Schema({
name: {
type: String,
required: true,
unique:true
},
address: {
type: String,
required: true
}
}, {
timestamps: true
});
// create a schema
var batchSchema = new Schema({
batchname: {
type: String,
required: true,
unique: true
},
activityname: {
type: String,
required: true
},
time: {
type:String,
required:true
},
duration: {
type:String,
required:true
},
classtype: {
type:String,
required:true
},
trainer: {
type:String,
required:true
},
price:{
type:Currency,
required:true,
unique:true
},
venue:[venueSchema]
}, {
timestamps: true
});
Run Code Online (Sandbox Code Playgroud)
而我的Routing code:
batchRouter.route('/:batchId/venue')
.post(function (req, res, next) {
Batches.findById(req.params.batchId, function (err, batch) {
if (err) throw err;
batch.venue.push(req.body);
batch.save(function (err, batch) {
if (err) throw err;
console.log('Updated venue!');
res.json(batch);
});
});
})
Run Code Online (Sandbox Code Playgroud)
这里父文档是batchSchema,子文档是venueSchema。
创建批处理后,我将获得一个id. 在此帮助下,id我当时尝试向场地添加值,它向我显示了错误
batch.venue.push(req.body);
小智 7
路由器();
在这个方法中如果我们没有提到 () 这也会显示推送错误......
const express = require('express');
const routerd = express.Router();
const Ninja = require('./models/ninja');
routerd.delete('/ninja:/id', function(req, res, next){
console.log(req.params.id);
res.send({type : 'DELETE'});
}).catch(next);
module.exports = routerd;
Run Code Online (Sandbox Code Playgroud)
您收到的错误意味着:
if (err) throw err;不会触发batch.venue的未定义,因为你得到Cannot read property 'push' of undefinedbatch定义是因为你没有得到Cannot read property 'venue' of undefined这意味着您与数据库建立了连接,您获得了一个具有所需 ID 的文档,但它不具有venue您期望存在且为数组的属性。
代替:
batch.venue.push(req.body);
Run Code Online (Sandbox Code Playgroud)
您可以使用:
if (!Array.isArray(batch.venue)) {
batch.venue = [];
}
batch.venue.push(req.body);
Run Code Online (Sandbox Code Playgroud)
或者:
if (Array.isArray(batch.venue)) {
batch.venue.push(req.body);
} else {
batch.venue = [req.body];
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西,即在尝试将元素推送到数组之前,您需要检查是否有数组。如果您没有数组,则必须创建一个新数组。
| 归档时间: |
|
| 查看次数: |
12408 次 |
| 最近记录: |