如何使用Node的驱动程序检查ObjectID是否有效
我试过了 :
var BSON = mongo.BSONPure;
console.log("Validity: " + BSON.ObjectID.isValid('ddsd'))
Run Code Online (Sandbox Code Playgroud)
但我一直得到一个例外而不是真或假.(例外情况只是'抛出e; // process.nextTick错误,或'首次打勾'错误'事件'
Gia*_* P. 72
不确定isValid()
函数的来源,但它不在node-mongodb-native中.
如果要检查24个十六进制字符的字符串,可以使用此正则表达式.
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");
Run Code Online (Sandbox Code Playgroud)
取自github.com/mongodb/js-bson/.../objectid.js
Eat*_*oes 45
isValid()
在js-bson库中,它是node-mongodb-native的依赖项.
对于发现此问题的人,我建议不要在其他答案中重新推荐此方法.而是像原始海报一样继续使用node-mongodb-native,以下示例将访问isValid()
js-bson中的方法.
var mongodb = require("mongodb"),
objectid = mongodb.BSONPure.ObjectID;
console.log(objectid.isValid('53fbf4615c3b9f41c381b6a3'));
Run Code Online (Sandbox Code Playgroud)
2018年7月更新:目前的做法是:
var mongodb = require("mongodb")
console.log(mongodb.ObjectID.isValid(id))
Run Code Online (Sandbox Code Playgroud)
Sea*_*ory 16
作为Eat at Joes的延伸答案......这在node-mongodb-native 2.0中有效
var objectID = require('mongodb').ObjectID
objectID.isValid('54edb381a13ec9142b9bb3537') - false
objectID.isValid('54edb381a13ec9142b9bb353') - true
objectID.isValid('54edb381a13ec9142b9bb35') - false
Run Code Online (Sandbox Code Playgroud)
@ GianPaJ的片段很棒,但需要稍微扩展以覆盖非十六进制的objectID.同一文件的第32行表示objectID的长度也可以是12个字符.这些密钥由mongodb驱动程序转换为24个字符的十六进制ObjectID.
function isValidObjectID(str) {
// coerce to string so the function can be generically used to test both strings and native objectIds created by the driver
str = str + '';
var len = str.length, valid = false;
if (len == 12 || len == 24) {
valid = /^[0-9a-fA-F]+$/.test(str);
}
return valid;
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用,mongoose
那么您可以使用 mongoose 进行验证,而不是依赖于任何其他库。
if (!mongoose.Types.ObjectId.isValid(req.id)) {
return res.status(400).send("Invalid object id");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39308 次 |
最近记录: |