NodeJS Express 根路径

4
在NodeJS Express模块中,指定路径“/”将捕获多个HTTP请求,例如“/”,“lib/main.js”,“images/icon.gif”等。
 var app = require('express')
 app.use('/', authenticate);

在上面的例子中,如果 authenticate 被定义如下:
var authenticate = function(request, response, next) {
    console.log("=> path = " + request.path);
    next()
}

那么你会看到:
=> path = /
=> path = /lib/main.js
=> path = /images/icon.gif

有没有人能建议一下如何在Express的"app.use"中定义一个仅捕获"/"路径的路径呢?
2个回答

2

如果你想展示静态文件,通常将它们放在一个名为public/的文件夹中。express框架内置了一个叫做static的中间件来处理对该文件夹的请求。

var express = require('express')
var app = express();

app.use(express.static('./public'));
app.use('/', authenticate);

app.get('/home', function(req, res) {
  res.send('Hello World');
});

现在,如果你把图片、CSS和JavaScript文件放在公共目录下,你可以像 public/ 是根目录一样访问它们。
<script src="http://localhost/lib/main.js"></script>

顺便提一下,声明中间件和路由的顺序很重要。 - aray12

2
据我所理解,你需要做的是,如果你有'/'和'/abc',你需要分别捕获它们。
这将起到作用:
app.use('/abc', abc);
app.use('/', authenticate);

意思是,先注册/abc中间件,然后再执行/中间件。

这个解决方案也存在问题。我们只声明了/abc。所以当用户调用未注册的路径时,它会命中这里。 您可以利用请求对象中的originalUrl属性来确定它是否为/或其他路径。这是有关此的文档:http://expressjs.com/en/api.html#req.originalUrl

if(req.originalUrl !== '/'){
   res.status(404).send('Sorry, we cannot find that!');
}
else{
  /*Do your stuff*/
}

谢谢您的评论。但这不是问题所在。使用您的示例,无论路径如何,都将调用authenticate方法,这就是我的问题。 - iwan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接