我经历了this快速教程。我想知道是否有可能将以下调用外包给一个单独的函数,因为它非常长?
employee_collection.db.bson_serializer.ObjectID.createFromHexString(id)
这是调用语句的整个文件:
var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;
EmployeeProvider = function(host, port) {
this.db = new Db(
'node-mongo-employee',
new Server(host, port, {}),
{safe: true}
);
this.db.open(function(){});
};
...
// find an employee by id
EmployeeProvider.prototype.findById = function(id, callback) {
this.getCollection(
function(error, employee_collection) {
if( error )
callback(error)
else {
employee_collection.findOne(
{_id: employee_collection.db.bson_serializer.ObjectID.createFromHexString(id)},
function(error, result) {
if( error )
callback(error)
else
callback(null, result)
}
);
}
}
);
};
...
exports.EmployeeProvider = EmployeeProvider;
它是快递应用程序的控制器。它缩短了,但应该让你知道它的作用。您可以在Github上找到整个申请表。
我试过
getid = function( employee_collection, id ) {
return employee_collection.db.bson_serializer.ObjectID.createFromHexString(id);
};
并使用
调用该函数{_id: getid(employee_collection, id),
但我收到了一个很长的ENOENT错误。
答案 0 :(得分:1)
假设您正在使用基本的node.js mongodb驱动程序,并且id
基本上像请求参数一样进入,这意味着它只是一个字符串,看起来像:
"53cfba87e248860d16e1f7e1"
然后你在这里使用的导入:
var ObjectID = require('mongodb').ObjectID;
为您提供直接使用功能。就这样做:
employee_collection.findOne({ "_id": ObejctID(id) },function(err,result) {
// work in here
});
您导入的ObjectID
已实现此功能。