gpt4 book ai didi

javascript - 自定义验证器,cb不是函数

转载 作者:行者123 更新时间:2023-12-03 01:31:08 24 4
gpt4 key购买 nike

node.js 中使用 mongoose 的自定义验证器出现问题。我试图在插入之前检查 headerLog 中是否存在 query

我的代码如下:

var mongoose = require('mongoose'); //layer above mongodb
var Schema = mongoose.Schema;

var headerLogSchema = new Schema({
query: { type: String, required: true, unique: true, validate: {
validator: function(v, cb) {
HeaderLog.find({query: v}, function(err, documents){
cb(documents.length == 0);
});
},
message: 'Header already exists in log, didnt save this one.'
}
}
})

var HeaderLog = mongoose.model('headerLog', headerLogSchema);

module.exports = HeaderLog;

错误:TypeError:cb 不是函数

我这样调用这个函数:

function logHeader(query) {
var newHeaderLog = new HeaderLog({
query: query
})

newHeaderLog.save(function(err) {
if (err) {
console.log(err);
}
else {
console.log('New header logged');
}
});
}

我做错了什么?

最佳答案

the reference状态,异步验证器应该具有 isAsync 标志:

validate: {
isAsync: true,
validator: function(v, cb) { ... }
}

或者返回一个 promise 。由于验证器已经使用了另一个模型,并且 Mongoose 模型是基于 Promise 的,因此使用现有的 Promise 是有意义的:

  validator: function(v) {
return HeaderLog.find({query: v}).then(documents => !documents.length);
}

countDocuments对于仅需要文档计数的情况,是 find 的更好替代方案。

关于javascript - 自定义验证器,cb不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51295658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com