您好我需要帮助处理如何处理路线。
在设置我的快递应用时,我有这样的事情:
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请求?
非常感谢。
答案 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会推断您的应用程序所在的文件夹。