如果未保存,则findOneAndUpdate无法保存新项目(猫鼬,Node.js)

时间:2018-11-15 13:55:04

标签: node.js mongodb mongoose

尝试使用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);
                    }
                })
            }
        })
});

现在在控制台中,当我尝试用邮递员进行测试时会吐出一个错误:

TypeError:无法读取null的属性“ length”

关于我该怎么做的任何想法?

P.S。 REST客户端响应“无法访问所请求的URL”, 但是我们点击了所需的路线,便开始发布post方法。

2 个答案:

答案 0 :(得分:0)

Response可以为null而不是空字符串,对象或对象数组,并且您不能获得null长度,因为null不是字符串或对象数组,因此您必须检查响应是否为!= null ,然后测试长度。

答案 1 :(得分:0)

在您的帮助下,终于找到了解决方法:

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');

});