实现了一个filter过滤器,所有的请求都会先经过这个函数,然后根据逻辑才能走到下一个next()。 问题是我在filter里面获取test请求头后,在后面的get(’/test’)路由里面再取test请求头,取不到了,值为undefined。
怎么能再把test请求头set回req里面?
var server = express.createServer();
//实现的过滤函数 var filter = function (req, res, next) { var test = req.headers.test;//这时候是有值的,但是后面get(’/test’)里面就没值了。 //有没有可以将test在set回req里面的API?我翻遍了node的req和express的文档,没看到有 //或者有其他方法实现这种过滤技术吗? if (test) { next(); } else { return res.send(‘filter ok’); } };
server.configure(function () { server.use(express.bodyParser()); server.use(express.methodOverride()); server.use(filter);//使用filter进行过滤 server.use(server.router); });
server.get(’/test’,function(req,res){ //在这里再次取test请求头的值已经取不到了 var test = req.headers.test; //test = undefined; });
没看明白~~~
不清楚filter实现,LZ可以变个思维,用Session保存test,路由到/test的时候从session中取:
req.session.test = req.headers.test;
还是不明白你的意思。
-
一般情况下req.headers是不应该改动的,而且你取了一次值也不会自动消失啊!不知道你所说的**“用完了”**到底是个神马情况?
-
如果要传值给下一个中间件,直接将值附加到req或res上就可以了,比如:
req.ooxx = 'OOXX';
此req非彼req
var express = require('express')
, routes = require('./routes')
, http = require('http')
, path = require('path');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
// 第1个filter
app.use(function (req, res, next) {
console.log(req.headers.host);
next();
});
// 第2个filter
app.use(function (req, res, next) {
console.log(req.headers.host);
next();
});
// 第3个filter
app.use(function (req, res, next) {
console.log(req.headers.host);
next();
});
});
app.get('/', function (req, res, next) {
res.send(req.headers.host);
});
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
你猜个毛啊?!req.headers就是一个对象:http://nodejs.org/api/http.html#http_request_headers
都不知道你从哪里学了个新名词叫神马**“字节流”**
@leizongmin 老雷你这次不厚道了啊~req.headers 官方明明说是read only
在express和connect的request
和response
对象都是不变的,所以可以直接对req
和res
进行操作。当然webjs不太一样,但是也可以相同的操作。
@snoopy 我没说不是 read only 啊?
@snoopy 这个req.headers是可以改的
get方法是过滤url header.test和url没关系的