Express.js 版本 4 中 req.url 和 req.originalUrl 之间的区别

编程代码JS

1个回答

写回答

孔先生你好

2025-07-09 17:57

+ 关注

JS
JS

在 Express.JS 版本 4 中,req.url 和 req.originalUrl 是两个常用的属性,用于获取请求的路径。虽然它们看起来很相似,但实际上有一些细微的区别。

首先,让我们来了解一下 req.url。这个属性返回的是相对于应用程序的路径,不包括主机名和查询参数。换句话说,它只返回路径部分。例如,如果我们的应用程序运行在 http://example.com,并且我们的路由处理程序绑定到了 /users,那么当我们访问 http://example.com/users?id=1 时,req.url 的值将是 "/users"。

接下来,我们来看一下 req.originalUrl。这个属性返回的是完整的原始 URL,包括主机名、端口号、路径和查询参数。继续上面的例子,当我们访问 http://example.com/users?id=1 时,req.originalUrl 的值将是 "/users?id=1"。

示例代码:

Javascript

const express = require('express');

const app = express();

app.get('/users', (req, res) => {

console.log(req.url); // 输出 "/users"

console.log(req.originalUrl); // 输出 "/users?id=1"

res.send('Hello World!');

});

app.listen(3000, () => {

console.log('Server is running on port 3000');

});

在上面的示例中,我们创建了一个基本的 Express 应用程序,并通过 GET 请求处理了 /users 路径。在路由处理程序中,我们使用了 console.log 来输出 req.url 和 req.originalUrl 的值,并通过 res.send 返回了一个简单的响应。

使用 req.url 进行路径匹配

在实际开发中,我们通常会使用 req.url 来进行路径匹配。因为它只返回路径部分,不包括查询参数,所以可以更方便地进行路由处理。例如,我们可以这样定义一个路由处理程序来处理 /users 路径:

Javascript

app.get('/users', (req, res) => {

// 处理 /users 路径的逻辑

});

这样,当我们访问 http://example.com/users?id=1 时,Express.JS 会自动将查询参数忽略,并将请求路由到我们定义的路由处理程序。

使用 req.originalUrl 获取完整的 URL

有时候,我们可能需要获取完整的 URL,包括查询参数。这时,我们可以使用 req.originalUrl。例如,我们可以在路由处理程序中记录用户访问的完整 URL:

Javascript

app.get('/users', (req, res) => {

console.log('User visited:', req.originalUrl);

// 处理 /users 路径的逻辑

});

这样,当用户访问 http://example.com/users?id=1 时,我们可以在控制台中看到 "User visited: /users?id=1" 的输出。

小结

在 Express.JS 版本 4 中,req.url 和 req.originalUrl 是用于获取请求路径的两个常用属性。req.url 返回的是相对于应用程序的路径,不包括主机名和查询参数;而 req.originalUrl 返回的是完整的原始 URL,包括主机名、端口号、路径和查询参数。根据具体的需求,我们可以选择使用其中的一个来处理请求路径。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号