我正在尝试将 Nodejs header 设置为返回的数据包,但在记录响应时它始终为空。
这是我在 node.js 服务器中的中间件。它应该将“From” header 添加到响应中,但它不会出现在记录响应的客户端中。
编辑:
除了将 res.set() 更改为 res.setHeaders() 之外,我还必须在客户端使用 response.headers() 而不是 response.headers 访问它们
app.use(function(reg, res, next){
var checkAdmin = false;
var bearerToken;
var bearerHeader = reg.headers.authorization;
if(admin.indexOf(reg.url) > -1){
console.log("varmistetaan onko admin");
checkAdmin = true;
checkYourPrivilege(checkAdmin, bearerHeader, res, reg, next);
} else if(public.indexOf(reg.url) < 0){
console.log("varmistetaan onko suojattu");
checkYourPrivilege(checkAdmin, bearerHeader, res, reg, next);
} else {
bearerToken = decodeToken(bearerHeader);
if(bearerToken !== false){
decoded = verifyToken(bearerToken);
if(decoded !== false){
if (checkIfExpired(decoded.expires)){
res.setHeader('From','test@test.com');
next();
}else{
res.set('From','test@test.com');
next();
}
}else{
res.set('From','test@test.com');
next();
}
}else{
res.set('From','test@test.com');
next();
}
}
});
这是我的 angularjs 拦截器,它正在记录此刻的响应:
.factory('authInterceptorService', ['$q', '$window', '$localStorage', function($q, $window, $localStorage){
return {
'request': function (config){
config.headers = config.headers || {};
if ($localStorage.accessToken) {
config.headers.Authorization = 'bearer ' + $localStorage.accessToken;
}
return config;
},
'response' : function(response){
console.log(response);
return response
},
'responseError': function(responseError){
responseError = JSON.parse(responseError.data);
if(responseError.tokenstatus === "expired"){
delete $localStorage.accessToken
window.location = "/";
}
if(response.status === 401 || response.status === 403) {
window.location = "/";
}
window.location = "/";
return $q.reject(response);
}
};
}])
这是响应的样子:
{…}
config: {…}
cache: Object { put: put(), get: get(), remove: remove(), … }
headers: Object { Accept: "application/json, text/plain, */*", Authorization: "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcml2aWxlZ2VzIjp7ImFkbWluIjp0cnVlLCJhc3Vubm90IjpmYWxzZSwib3Bpbm5vdCI6ZmFsc2V9LCJvcHRpZXRvbWVtYmVyIjpmYWxzZSwiYXN1bm5vdG1lbWJlciI6ZmFsc2UsImV4cGlyZXMiOjE1MTYwNDA3MjksImlhdCI6MTUxNjAwNDcyOX0.hU8yT3G58ZtkJbBo-SUwLmcSMSX_8cHYxnX0GdmfJVM" }
jsonpCallbackParam: "callback"
method: "GET"
paramSerializer: function Ef/this.$get/<()
transformRequest: Array [ Df/this.defaults.transformRequest<() ]
transformResponse: Array []
url: "koti.html"
__proto__: Object { … }
data: "<h1>Tähän tulee kotisivun sisältö</h1>\n"
headers: wd/<() #Response headers should be here?
length: 1
name: ""
__proto__: function ()
status: 200
statusText: "OK"
__proto__: Object { … }
最佳答案
res.setHeader()
和res.writeHead()
是Node.js的原生方法,res.set()
是来自 Express 框架的方法。
文档:res.setHeader() , res.set() res.writeHead
这三个方法做完全一样的事情,设置 HTTP 响应的 header 。唯一的区别是 res.setHeader()
和 res.writeHead()
只允许您设置一个单一的标题和 res.set()
将允许您设置多个标题。因此,请使用适合您需求的那个。
您可以尝试其中任何一种:
res.setHeader('From','test@test.com')
或
res.writeHead(200,{'Form':'test@test.com'})
关于angularjs - 未设置 Node.js 响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48261917/