如何在Node.js Express中获取当前请求的完整URL?
如何在Node.js Express中获取当前请求的完整URL?
你当前的方案里,req.url只能获取请求的路径部分(比如/api/user),无法得到包含协议、域名、端口的完整URL。下面是几种简便的实现方法:
方法一:手动拼接请求属性
Express的req对象自带构建完整URL所需的全部属性,直接拼接即可:
const app = express(); app.use(function(req, res, next) { const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`; console.log(fullUrl); next(); });
req.protocol:获取请求使用的协议(http/https)req.get('host'):获取请求的主机名(包含端口,比如localhost:3000或example.com)req.originalUrl:获取完整的请求路径(包含查询参数,比如/api/user?id=123)
方法二:使用Node.js内置url.format()
借助Node.js原生url模块的格式化方法生成完整URL:
const url = require('url'); const app = express(); app.use(function(req, res, next) { const fullUrl = url.format({ protocol: req.protocol, host: req.get('host'), pathname: req.originalUrl }); console.log(fullUrl); next(); });
方法三:使用URL构造函数(Node.js 10+支持)
更现代的写法是利用原生URL构造函数:
const app = express(); app.use(function(req, res, next) { const fullUrl = new URL(req.originalUrl, `${req.protocol}://${req.get('host')}`); console.log(fullUrl.href); // 输出完整URL字符串 next(); });
你的环境版本:
node -v:v16.15.1npm -v:8.19.2
以上方法都能在你的环境中正常运行,可根据实际需求选择使用。
内容的提问来源于stack exchange,提问作者PRINCESS PRANITI
相关产品推荐
相关产品推荐

