提问者:小点点

如何防止express server为静态文件夹中的api路由提供服务


嗨,我需要一些关于快车如何处理路线的帮助。

在设置我的express应用程序时,我有以下内容:

接下来,我挂载一些api路由:

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

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

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

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

如何阻止express server同时尝试为静态文件夹中的api请求提供服务?

谢谢。


共2个答案

匿名用户

回答我自己的问题。。。它似乎是以下命令的重复:express.static()`从路由中继续路由我的文件

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

简而言之,挂载api路由器的app.use()声明应该出现在告诉express.static从何处提供静态文件的app.use()语句之前。通过这种方式,后者在api路由处理完成后充当一个catchall。路由器引擎订单事项。。。

匿名用户

你的答案是错误的,或者说你曲解了问题。您的原始配置:

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

看起来很好,因为路线之间没有冲突。你链接的线程也不是真的一样,我可以理解为什么在那些情况下移动路由会起作用。

我要说的唯一一件事是,静态文件夹的路径不可靠,您应该使用,或者实际上在您的情况下,您可以只使用-express将推断出应用程序从哪个文件夹提供服务。