微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐