node.js - Express/Node 响应 header 列表?

标签 node.js angular express

我构建了一个 Express/NodeJS REST API,它在响应上设置了一个 header :

router.route("/api/articles")
    .get(authCheck, function (req, res) {
        let pagination = req.get('Pagination').split(",");
        let currentPage = pagination[0];
        let currentPageSize = pagination[1];
        let skip = (currentPage - 1) * currentPageSize;
        var response = {};
        articlesOp.count({}, function (err, totalItems) {
            articlesOp.find({}, function (err, data) { response = data; }, {
                sort: {
                    artNr: 1
                }
            }).skip(skip > 0 ? ((currentPage - 1) * currentPageSize) : 0).limit(currentPageSize).exec(function (err, docs) {
                if (err)
                    res.json(err);
                else {
                    res.setHeader('Pagination', '{"page": ' + currentPage + ', "pageSize": ' + currentPageSize + ', "totalItems": ' + totalItems + ', "totalPages": ' + Math.ceil(totalItems / currentPageSize) + '}');
                    res.setHeader('X-Foo', 'bar');
                    res.json(response);
                }
            });
        });

    });

在 Postman 中执行 thsi API 时,我可以在 header 部分看到设置了以下 header :

Access-Control-Allow-Origin →*
Connection →keep-alive
Content-Length →3697
Content-Type →application/json; charset=utf-8
Date →Sat, 18 Feb 2017 10:05:10 GMT
ETag →W/"e71-NQjTx6uFpe8cuvaoLUXPOg"
Pagination →{"page": 3, "pageSize": 10, "totalItems": 442, "totalPages": 45}
X-Foo →bar
X-Powered-By →Express

但是当我从 Angular2 应用程序执行代码时,除了“Content-Type”之外的 header 不存在。 (或者至少我找不到它们)

let headers = new Headers();
if (page != null && itemsPerPage != null) {
            headers.append('Pagination', page + ',' + itemsPerPage);
        }

        return this.authHttp.get(this._baseUrl + 'articles', {
            headers: headers
        })
            .map((res: Response) => {

                console.log(res.headers.keys());
                pResult.result = res.json();

                if (res.headers.get("Pagination") != null) {
                    //var pagination = JSON.parse(res.headers.get("Pagination"));
                    var paginationHeader: Pagination = this.itemsService.getSerialized<Pagination>(JSON.parse(res.headers.get("Pagination")));
                    console.log(paginationHeader);
                    pResult.pagination = paginationHeader;
                }
                return pResult;
            })
            .catch(this.handleError);

最佳答案

添加 CORS 异常可以解决问题:

res.setHeader("access-control-expose-headers", "Pagination");

关于node.js - Express/Node 响应 header 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315316/

相关文章:

Angular 2 form reset()不重置值_submitted或submitted

javascript - 数据未使用 Handlebars 和expressnjs渲染

node.js - 如何使用node.js从mongodb获取数据并显示

javascript - mocha 无法创建我的函数的实例

angular - "this.appInits[i]"不是函数

angular - $locationChangeStart 等同于 Angular 4

node.js - 在 Mongoose 中调用 modal.countDocuments() 和 modal.count() 时抛出错误

node.js - 当数据量很大时,Angular 2 http get 请求被调用两次

variables - Node.js 模块变量是否在多个调用之间共享?

javascript - 没有递归函数,仍然收到超出最大调用堆栈大小的错误