将XXX.db.bson_serializer.ObjectID.createFromHexString(id)外包给一个函数?

时间:2014-07-23 13:24:17

标签: javascript node.js mongodb express

我经历了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错误。

1 个答案:

答案 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已实现此功能。