![](/img/trans.png)
[英]app.use(express.static(path.join(__dirname, 'public'))); ReferenceError: path is not defined what is issue?
[英]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.