Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS表示根路径_Node.js_Express - Fatal编程技术网

Node.js NodeJS表示根路径

Node.js NodeJS表示根路径,node.js,express,Node.js,Express,在NodeJS Express模块中,指定路径“/”将捕获多个HTTP请求,如“/”、“lib/main.js”、“images/icon.gif”等 在上面的示例中,如果验证定义如下 var authenticate = function(request, response, next) { console.log("=> path = " + request.path); next() } 然后你就会看到 => path = / => path = /li

在NodeJS Express模块中,指定路径“/”将捕获多个HTTP请求,如“/”、“lib/main.js”、“images/icon.gif”等

在上面的示例中,如果
验证
定义如下

var authenticate = function(request, response, next) {
    console.log("=> path = " + request.path);
    next()
}
然后你就会看到

=> path = /
=> path = /lib/main.js
=> path = /images/icon.gif

有谁能建议如何在Express“app.使用”that only catch“/”中定义路径吗?

如果您试图公开静态文件,人们通常会将这些文件放在名为
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>

据我所知,您需要做的是,如果您有“/”和“/abc”,您需要单独捕获它

这将实现以下目的:

app.use('/abc', abc);
app.use('/', authenticate);
也就是说,首先注册/abc中间件,然后再注册/abc中间件

这个解决方案也有一个问题。这里我们只声明了/abc。所以当用户调用一个未注册的路径时,它会点击这里。 您可以使用请求对象中的originalUrl属性来确定其/唯一性或存在其他内容。以下是这方面的文档:


顺便说一句,声明中间件和路由的顺序很重要。感谢您的评论。但这不是问题所在。使用您的示例,无论路径如何,都将调用authenticate方法,这是我的问题。
app.use('/abc', abc);
app.use('/', authenticate);
if(req.originalUrl !== '/'){
   res.status(404).send('Sorry, we cannot find that!');
}
else{
  /*Do your stuff*/
}