簡體   English   中英

在Express中正確使用app.set()嗎?

[英]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.

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