繁体   English   中英

为什么在使用app.use(express.static(path.join(...)))之前无法启动Express Middleware?

[英]Why does Express Middleware not fire when preceded by app.use(express.static(path.join(…)));

我正在尝试在非常简单的快速后端样板中调试问题。 我有一个通用的中间件,我想对每一个击中服务器的请求进行触发(本质上,我只是在尝试设置cookie。)

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}`);

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

问题是-我是否使用邮递员在本地主机上将GET请求发送到本地文件:6000,或者是否访问Heroku上的容器, console.log()无法触发-可能还有中间件的其余部分。

但是,如果我将此行移到cookie中间件下面:

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

或者,如果我将其注释掉,则会触发我的中间件并显示console.log()。 这是一个简单的修复程序,但是我不知道为什么会这样发生,有人知道我在使中间件按原样失败的代码中做错了什么吗?

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

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

您的请求“ GET localhost:6000 / *”将在“ cookie”中间件之前路由到“静态文件”中间件。 如果“静态文件”中间件发现文件存在,则响应将以文件结尾。 如果不是,则中间件的操作与该选项有关(贯穿),您可以获取有关服务器静态选项的更多详细信息

我建议为静态文件middlware设置根安装路径:

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

如果要检查所有请求中的cookie,请使用以下格式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM