快递的通用路线处理程序

Generic route handlers for express

我正在尝试为 Express 应用程序中的 REST 样式路由制作一些通用处理程序。

它们在对象中定义,然后与特定路由文件中定义的属性合并。属性合并工作正常。我遇到的问题是以某种方式将我的模型对象传递给处理程序的匿名函数。

下面的代码是最清晰的尝试,展示了我正在尝试做的事情,但显然失败了,因为 Model 在匿名函数的范围内丢失了。

/**
 * Model is a Mongoose model object
 */
routeDefinitions: function (resourceName, Model) {
    routePath = api_prefix + resourceName.toLowerCase();

    var routeProperties = {
        getById: {
            method: 'get',
            isArray: false,
            auth: true,
            url: routePath + '/:id',
            handlers: [function (req, res, next) {
                Model.findById(req.param('id')).exec(res.handle(function (model) {
                    console.log(model);
                    res.send(model);
                }));
            }]
        },
        getAll: {
            method: 'get',
            isArray: true,
            auth: true,
            url: routePath,
            handlers: [function (req, res, next) { 
                Model.find().exec(res.handle(function (model) {
                    res.send(model);
                }));        
            }]
        },
        //... (create, update, delete etc)
    }
}

我查看了几个选项,但对 Node/Express 和 Connect 中间件还是很陌生,所以我可能遗漏了一些更明显的东西。

我通过调用 mongoose.model:

解决了这个问题
routeDefinitions: function (resourceName) {
    routePath = api_prefix + resourceName.toLowerCase();
    var modelName = inflect.singularize(resourceName);
    var Model = mongoose.model(modelName);

    var routeProperties = {
        getById: {
            method: 'get',
            isArray: false,
            auth: true,
            url: routePath + '/:id',
            handlers: [function (req, res, next) {
                Model.findById(req.param('id')).exec(res.handle(function (model) {
                    console.log(model);
                    res.send(model);
                }));
            }]
        },
        getAll: {
            method: 'get',
            isArray: true,
            auth: true,
            url: routePath,
            handlers: [function (req, res, next) { 
                Model.find().exec(res.handle(function (model) {
                    res.send(model);
                }));        
            }]
        },
        //... (create, update, delete etc)
    }
}