什么是node.js http模块的“req.url”的express.js等价物?

使用vanilla node.js的http.createServer时,可以通过req.url获取客户端请求的url。

使用express.js时,响应HTTP GET请求的代码如下所示:

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

我的问题是,它需要你有一个单独的app.get服务器上的每一个页面或项目。 如何使用express.js像vanilla node.js服务器来处理由http.createServer生成的callback中的每个获取请求?

你永远不需要使用req.url 。 Express允许你在你的路线中有variables。

 app.get('/article/:id', function(req, res) { // req.params.id will be whatever came after /article/ }); 

你也可以看中并使用正则expression式。

 app.get(/\/article(\d+)/, function(req, res) { // req.params[0] will have the digits of /article123 }); 

如果你真的想要的URL, req.url仍然存在。 但是,您应该使用路由来处理所有路由逻辑。 我从来没有真正需要使用req.url

注册后续处理程序,如快速模块…

app.use(function(req, res, next){ ... YOUR CODE HERE ... })

在你的路线之后这样做…

你好

为了回答具体问题(如标题中所述) ,ExpressJS提供

  • req.originalURL ,相当于Node的req.url
  • req.baseUrl实际上是由Express装载的path

所以,本质上, Express'req.baseUrl + req.url等同于Node的req.url

另外,Express的路由要求你明确地设置每个页面的path; 它也接受可以处理特定请求的正则expression式string。

看看Express的路由 ; 它应该对你有巨大的好处。