如果不保存新项目,findOneAndUpdate 不起作用(Mongoose,Node.js)
2018-11-15
225
尝试使用 Mongoose 将一些对象发送到数据库。 即,我获取搜索查询并将其保存到数据库,并记录唯一条目数。
这是我的架构:
const entrySchema = mongoose.Schema({
searchWord: { type: String, required: true, unique: true},
numEntries:{type:Number,default:0},
});
const entry = module.exports = mongoose.model('entry', entrySchema);
这是我使用的方法:
searchRouter.post('/search', (req, res) => {
let entry = new SearchEntry();
SearchEntry.findOneAndUpdate({ searchWord: req.body.searchWord },
{ $inc: { numEntries: 1 } },
{ new: true }, (err, response) => {
if (err) {
console.log(err);
}
if (!response.length) {
entry.searchWord = req.body.searchWord;
SearchEntry.save((err) => {
if (err) {
console.log(err);
}
})
}
})
});
现在,当我尝试使用 postman 测试它时,控制台中会显示错误:
TypeError:无法读取 null 的属性“length”
有人知道我做错了什么吗?
P.S. REST 客户端响应“无法访问请求的 URL”, 但是我们找到了所需的路由,并且正在启动 post 方法。
2个回答
响应可能为空,而不是空字符串、对象或对象数组,并且您无法获取空长度,因为空不是字符串或对象数组,因此您必须检查响应是否!=空,然后测试长度。
Hedi Lahouar
2018-11-15
在您的帮助下终于找到了解决方案:
searchRouter.post('/search', (req, res) => {
let entry = new SearchEntry();
SearchEntry.findOneAndUpdate({ searchWord: req.body.searchWord },
{ $inc: { numEntries: 1 } },
{ new: true }, (err, response) => {
if (err) {
console.log('find error ', err);
}
if (response === null) {
console.log('here');
entry.searchWord = req.body.searchWord;
console.log(entry);
entry.save((err) => {
if (err) {
console.log('save error', err);
}
})
}
})
res.send('done');
});
Dominik Domanski
2018-11-15