代码之家  ›  专栏  ›  技术社区  ›  Mikhail

为什么Express中间件前面有app.use(Express.static(path.join(…))时不启动;

  •  0
  • Mikhail  · 技术社区  · 7 年前

    const express = require('express');
    const path = require('path');
    const uuidv4 = require('uuid/v4');
    const cookieParser = require('cookie-parser')
    
    const app = express();
    app.use(cookieParser());
    
    app.use(express.static(path.join(__dirname, 'client/build')));
    
    app.use('/', (req, res, next) => {
        console.log(req.cookies)
        if (!req.cookies['audience_tracking_id']) {
            console.log('Processed Request - User Does Not Have Cookie.')
            const uniqueID = uuidv4();
            res.setHeader('Set-Cookie', [`audience_tracking_id=${uniqueID}`, `contentFocus=${randomProductName()}`]);
        }
        next();
    });
    
    
    app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname + '/client/build/index.html'))
    });
    
    app.use(function(err, req, res, next) {
        console.log(err)
        res.status(err.status || 500).send();
    });
    
    const port = process.env.PORT || 6000;
    
    app.listen(port);
    
    console.log(`Audience Service Host listening on ${port}`);
    

    该应用程序包括一个React前端,它托管在Heroku上,我通过同一容器中的Express来提供静态构建文件。

    问题是-是否使用Postman在本地向中的这个文件发送GET请求localhost:6000,或者是否访问Heroku上的容器 console.log() 无法启动-可能还有其他中间件。

    app.use(express.static(path.join(__dirname, 'client/build')));
    

    或者,如果我把它注释掉,我的中间件就会启动,console.log()就会出现。这是一个简单的修复,但我不知道为什么会发生这种情况,有人知道我在这个代码中犯了什么错误,使中间件失败了吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   menya    7 年前

    这是因为“静态文件”中间件将尝试将所有请求与服务器匹配:

    app.use(express.static(path.join(__dirname, 'client/build')))
    

    你的请求“得到localhost:6000/*将路由到“静态文件”中间件之前的“cookie”中间件。如果“静态文件”中间件发现文件存在,响应将以文件结束。如果没有,中间件的操作与选项(fallthrough)相关,您可以获得更多关于 server-static's option

    static file middlware :

    app.use("/dist", express.static(path.join(__dirname, 'client/build')))
    

    app.use((req, res, next) => {
        // Do something
    })
    
    推荐文章