我正在使用 NodeJS + ExpressJS 进行票务API。在PUT方法中修改在我有下一个错误之前创建的故障单。
错误
ArgumentException
我调用修改故障单的功能是下一个:
ticket.js
/home/ismael/projects/nodejs-ticketing/routes/ticket.js:38
item.save(function(err){
^
TypeError: item.save is not a function
at /home/ismael/projects/nodejs-ticketing/routes/ticket.js:38:12
at Query.<anonymous> (/home/ismael/projects/nodejs-ticketing/node_modules/mongoose/lib/query.js:2169:28)
at /home/ismael/projects/nodejs-ticketing/node_modules/kareem/index.js:177:19
at /home/ismael/projects/nodejs-ticketing/node_modules/kareem/index.js:109:16
at _combinedTickCallback (node.js:370:9)
at process._tickCallback (node.js:401:11)
[nodemon] app crashed - waiting for file changes before starting...
我按照mongoose教程更新了 _modifyPutTicket = function(req, res){
var query = Ticket.findOne().where('issue').equals(req.params.issue).lean();
log.debug( 'New data: ' + JSON.stringify(req.body) );
query.exec(function(err, item){
if(err)
res.send(err);
log.debug( 'Issue: ' + JSON.stringify(item) );
item.title = req.body.title;
item.description = req.body.description;
log.debug( 'Issue modified: ' + JSON.stringify(item) );
item.save(function(err){
if(err){
log.debug( 'Issue error: ' + err );
res.send(err);
}else{
res.send(item);
}
});
});
};
app.put('/api/ticket/:issue/', _modifyPutTicket);
中存储的文档。我做错了什么?
谢谢你。
答案 0 :(得分:3)
问题是您在构建查询时使用lean()。使用精简版找到的文档将作为Javascript对象而不是完整的Mongoose文档返回,并且没有任何getter / setter。