node.js – NodeJS回调 – 访问’res’

我正在使用Express框架,我在其中一个路由文件中有以下内容

var allUsersFromDynamoDb = function (req,res) {
var dynamodbDoc = new AWS.DynamoDB.DocumentClient();
var params = {
    TableName: "users",ProjectionExpression: "username,loc,age"
};

dynamodbDoc.scan(params,function (err,data) {
    if (err) {
        console.error("Unable to query. Error:",JSON.stringify(err));
        res.statusCode = 500;
        res.send("Internal Server Error");
    } else {
        console.log("DynamoDB Query succeeded.");
        res.end(JSON.stringify(data.Items));
    }
});
}

我在我的一个路线中使用上述功能

router.get('/users',allUsersFromDynamoDb);

现在,如果定义为单独的函数,我在dynamodbDoc上调用“scan”时定义的回调可能非常有用.我也可以为我的其他一些路线重复使用它.

但是我怎样仍然可以访问这个新功能中的“res”?

我想我应该使用“封闭”,但我似乎无法完全正确.我想我需要保持新回调函数的签名,以期望2个参数,“错误”和“数据”,如下页所示:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property

关于如何做到这一点的任何想法?

解决方法

您可以将该功能用作您想要的每条路线 http://expressjs.com/en/guide/using-middleware.html的中间件

带有中间件的新路由:

var middlewares = require('./middlewares'),controllers = require('./controllers');

router.get('/users',middlewares.allUsersFromDynamoDb,controllers.theRouteController);

中间件(middlewares.js),您将数据传递给req,以便您可以在所有需要的地方使用该数据:

exports.allUsersFromDynamoDb = function (req,res,next) {
    var dynamodbDoc = new AWS.DynamoDB.DocumentClient();
    var params = {
        TableName: "users",age"
    };

    dynamodbDoc.scan(params,data) {
        if (err) {
            console.error("Unable to query. Error:",JSON.stringify(err));
            next("Internal Server Error");
        } else {
            console.log("DynamoDB Query succeeded.");
            req.dataScan = JSON.stringify(data.Items);
            next();
        }
    });
};

最后控制器(controllers.js):

exports.theRouteController = function (req,res) {
    // Here is the dataScan you defined in the middleware
    res.jsonp(req.dataScan);
};

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...