我正在使用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 举报,一经查实,本站将立刻删除。