何时在Node Express应用中使用app.use()

时间:2018-10-14 12:29:46

标签: node.js express

我试图理解何时需要在节点Express

中使用 app.use

在网上搜索时,我在reddit stating the difference between app.get和app.use上偶然发现了这个答案

基于此,我能够总结以下内容。

app.use是超级路由还是中间件?意味着它在app.use下面/之后写的每条路线上都被调用?

此外,如果有人可以添加有关app.use的更多信息/做法,我们将不胜感激。

3 个答案:

答案 0 :(得分:2)

  1. 用于静态路径

    //Set static path
    app.use(express.static(__dirname + '/public'));
    
  2. 用作路由器

    //user
    app.use('/', require('./controllers/user'));
    
  3. 用于手动中间件

    //Body-parser
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({
        extended: true
    }));// Body parser use JSON data
    
  4. 用于自定义中间件

    // force https
    app.use ( (req, res, next) =>{
        if (req.secure) {
            // request was via https, so do no special handling
            next();
        } else {
            // request was via http, so redirect to https
            res.redirect('https://' + req.headers.host + req.url);
        }
    });
    

答案 1 :(得分:2)

将ExpressJS与NodeJS结合使用时,您可以将app.getapp.use用于几个有用的方面。

在初始化let app = express();之类的应用后,您可以在下面找到一些示例:

app.use(...)

正如您正确指出的那样,它对“中间件”很有用,它将应用于所有您指定后缀的GET,POST等。例如,您只能在要“通过用户/通过身份验证”的GET之前使用中间件。

  • 指示文件夹中包含静态内容:app.use(express.static(__dirname + "/public"));

  • 包括用于JSON内容的解析器:app.use(bodyParser.json());

  • 定义“ Cookie Parser”签名字符串:app.use(cookieParser("Signing text example"));

  • 用于URL的单独路由器,位于不同文件中:app.use("/api", apiRouter);app.use("/news", newsRouter);app.use("/", siteRouter);

  • 对于自定义错误处理程序:app.use(sites404handler);app.use(globalErrorHandler);

app.get(...)

在谈论app.get(...)时,您表示要通过GET方法访问哪些URL。但是您可以在此处使用几个选项:

  • 表示您有一个主页:app.get("/", function(req, res) { res.send("Hello world!"); });

  • 接受POST请求:app.post("/", function(req, res) { res.send("Hello world! With POST call."); });

  • 您还可以将其分离为另一个文件“ apiRouter.js”,并在其中添加:let router = express.Router(); router.route("/books").get(function(req, res) { res.send("/api/books/ called via a Router"); });

app.set(...)

请记住,您还可以选择app.set(...)。例如,这对于定义诸如把手(.hbs文件)之类的视图引擎很有用。

希望这会有所帮助!

答案 2 :(得分:1)

app.get路由处理程序is applied to GET requests,用于指定路径或所有路径:

  

使用指定的回调函数将HTTP GET请求路由到指定的路径。

app.use中间件is applied to all requests,用于指定路径或所有路径:

  

在指定路径上安装指定的一个或多个中间件函数:当所请求路径的基数与path匹配时,将执行中间件函数。

use用于将某些逻辑(中间件)应用于特定路由或整个应用程序,而与请求方法无关。