[英]Proper use of app.set() in express?
在遇到app.set()和app.get()之前,我一直无法访问自己的快速中间件内部的变量。 但是,我想知道这是否适合app.set()的使用,以及是否有更好的方法来访问中间件内部的变量。 这是一个例子:
var express = require("express");
var http = require("http");
var https = require("https");
var s3Client = require("./lib/s3_wrapper");
var drillClient = require('./lib/drill_wrapper');
var fs = require("fs");
var app = express();
app.set("s3Client", s3Client);
app.set("drillClient", drillClient);
var adminParams = JSON.parse(fs.readFileSync("./conf/config.json"), "utf-8");
var adminBucket = adminParams.bucket;
var adminS3Client = new s3Client(adminParams);
app.use(function(req, res, next) {
var accessKey = req.header("Authorization");
adminS3Client.getObject({Bucket: adminBucket, Key: accessKey})
.then(function(results) {
req.config = JSON.parse(results.Body);
next();
})
.catch(function(err) {
console.log(err);
res.status(err.status).send(err.message);
});
});
app.get("/getObject/:bucket/:objectKey", function(req, res) {
var params = {
Bucket: req.params.bucket,
Key: req.params.objectKey
};
var s3 = req.app.get("s3Client");
var s3Client = new s3(req.config);
s3Client.getObject(params)
.then(function(results) {
res.status(200).send(results.Body);
})
.catch(function(err) {
res.status(500).send(err.message);
});
});
如您在app.get(“ / getObject”)路由中所见,我正在使用req.app.get(“ s3Client”),因为没有它,我将无法创建s3Client的新实例,因为s3Client始终是未定义的这一点。 感谢您的时间。
我会冒险说这不是一个好用法。 您要将整个模块放在该变量中吗? 为什么? 如果您需要在其他地方使用该模块,则只需再次使用它即可。 如果您将所有内容都放在一个文件中,则只需一次将其添加到顶部即可。
const s3Client = require("./lib/s3_wrapper");
app.get("/getObject/:bucket/:objectKey", function(req, res) {
//s3Client was already defined.
s3Client.something()
});
然后在其他文件中的某个位置。
//you import it again
const s3Client = require("./lib/s3_wrapper");
s3Client.something()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.