node express框架req.originalUrl baseUrl parh 有什么区别?
本文介绍了node express框架req.originalUrl baseUrl parh 有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
解决方案
url在解析过程是会被逐级删减。如:
// app.js
...
var express = require('express');
var users = require('users');
var app = express();
app.use('/users', users);
module.exports = app;
// users.js
var express = require('express');
var router = express.Router();
router.count = 0;
// 错误的写法
/*
router.get('/users/id', function(req, res, next) {
res.send('/user/id');
});
*/
// 正确的写法
router.get('/id', function(req, res, next) {
res.send('/user/id');
});
module.exports = router;
采用第一种写法,浏览器会得到404 Not Found。第二种则正常。原因即在于,url在解析过程是会被逐级删减。
通过node-inspector调试上面的例子,可得到运行中req.url,req.originalUrl,req.baseUrl的值。
// Debug Console
> req.url
"/id"
> req.originalUrl
"/user/id"
> req.baseUrl
"/user"
解释如下:
req.url = req.originalUrl - req.baseUrl。也是router.get传入的匹配路径的匹配对象。这也就可以解释上面的例子的运行结果了。all,post,put等等函数同理。
req.originalUrl与req.url类似。不同的是,它用于备份最初的请求url,从而你可以随意重写req.url来到处跳转,而不用担心丢失初始的url。比如,用于挂载中间函数的app.use()就会重写req.url来压缩挂载点的长度。
req.baseUrl存储当前router挂载的路径。即app.use('/path', router);
。此时/path就是baseUrl。即便在挂载的时候使用的是正则等匹配表达式,baseUrl存储的也会是匹配的字符串,而不是正则表达式。
这篇关于node express框架req.originalUrl baseUrl parh 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文