簡體   English   中英

快遞的通用路線處理程序

[英]Generic route handlers for express

我正在嘗試為Express應用程序中的REST樣式路由創建一些通用處理程序。

它們在一個對象中定義,然后與特定路由文件中定義的屬性合並。 屬性的合並工作正常。 我遇到的問題是以某種方式將我的Model對象傳遞到處理程序的匿名函數中。

下面的代碼是最清晰的嘗試,顯示了我要執行的操作,但是由於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)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM