angularjs - 未设置 Node.js 响应 header

标签 angularjs node.js http express header

我正在尝试将 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/

相关文章:

javascript - 如何将换行符从 JSON 渲染为 HTML

javascript - Angular.js 在 ng-repeat 中获取二维数组中最后一个元素的索引

angularjs - Angular Dynamic Locale 无法立即工作

node.js - 为什么 npm install 在 git bash 上不起作用

javascript - 如果JS中存在值,如何根据日期按降序对数组进行排序?

javascript - Angular 选择/下拉分层数据

javascript - 如何使用云功能在Firebase中获取实时数据库?

android - 使用 Android 上托管的 HTTP 服务器检索 POST 数据

java - 如何在用户首选浏览器中打开网页作为 Java 中的发布请求

javascript - 消除 "X-Powered-By" header 是否会自动从 HTTP 响应中消除 "Server" header