2.7 内置中间件
优质
小牛编辑
127浏览
2023-12-01
2.7.1 init
该中间件是初始化中间件,在 header 头里面增加一个 X-Powered-By 字段,然后在 req,res 上面互相保存一下,让 req 的原型链设置为 app.request,以及初始化 locals 变量 。
exports.init = function(app){
return function expressInit(req, res, next){
if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');
req.res = res;
res.req = req;
req.next = next;
setPrototypeOf(req, app.request)
setPrototypeOf(res, app.response)
res.locals = res.locals || Object.create(null);
next();
};
};
2.7.2 query
query 依赖 package 包 qs、parseurl。qs 是一个解析 querystring 的包,querystring 就是 URL 后面,?username=yugo&gender=mail&year=22
这样类似的一段字符串,它会解析成一个键值对的对象保存到 req.query 上面去。
module.exports = function query(options) {
var opts = Object.create(options || null);
var queryparse = qs.parse;
if (typeof options === 'function') {
queryparse = options;
opts = undefined;
}
if (opts !== undefined && opts.allowPrototypes === undefined) {
// back-compat for qs module
opts.allowPrototypes = true;
}
return function query(req, res, next){
if (!req.query) {
var val = parseUrl(req).query; // parseUrl 的功能与 Node 核心模块的 url.parse 相同,不过多了一个缓存功能。
req.query = queryparse(val, opts);
}
next();
};
};