如何防止快递服务器从静态文件夹

时间:2017-09-30 20:40:20

标签: node.js express routes

您好我需要帮助处理如何处理路线。

在设置我的快递应用时,我有这样的事情:    app.use(express.static('public'));

接下来,我安装了一些api路由:

app.use('/api', myrouter);
app.get('*', function(req, res) {
    res.sendFile(path.resolve('public/index.html'));
});

但是,当前端通过api路由请求数据时,例如在' localhost:3000 / api / things ',我在Express调试日志中看到,在某些时候(不确定何时)它实际上尝试将此请求作为静态文件提供,如:

send stat "C:\myproject\public\api\things" +230ms

即使这个文件夹在'public'中不存在,也应该由我的api单独处理。仅供参考,/api/things路由的处理程序仅针对GET方法实现,并且在某些时候会被调用。

如何阻止快速服务器尝试从静态文件夹提供api请求?

非常感谢。

2 个答案:

答案 0 :(得分:1)

回答我自己的问题......这似乎是这个问题的重复: `express.static()` keeps routing my files from the route

所以答案就是这个:https://stackoverflow.com/a/28143812/8670745

简而言之,挂载api路由器的app.use()声明应该出现在之前的 app.use()语句中,告诉express.static从哪里提供静态文件。这样,后者在api路径处理完成后就充当了捕获。路由器引擎顺序很重要......

答案 1 :(得分:1)

你的回答是错误的,或者你错误地解释了这个问题。您的原始配置:

app.use(express.static(__dirname + 'public'));
app.use('/api', myrouter);

看起来非常好,因为路线之间没有冲突。您链接的线程也不一样,我可以看到为什么在这些情况下移动路线会有效。

我唯一要说的是你的静态文件夹的路径不可靠,你应该真的使用path.join,或者实际上在你的情况下你可以做express.static('public') - express会推断您的应用程序所在的文件夹。