angular - HttpHeaders.applyUpdate 'Cannot read property ' 长度'未定义' Angular 通用服务器

标签 angular webpack angular-cli angular6 angular-universal

我正在尝试将 Angular Universal 与我的项目集成。 在修复了很多错误之后,我在找出这个错误时遇到了一些麻烦。非常感谢您的帮助。

构建运行正常,但在运行服务器时出现此错误。

Listening on: http://localhost:8080 ERROR TypeError: Cannot read property 'length' of undefined at HttpHeaders.module.exports.HttpHeaders.applyUpdate (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:127015:27) at C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:126986:74 at Array.forEach () at HttpHeaders.module.exports.HttpHeaders.init (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:126986:33) at HttpHeaders.module.exports.HttpHeaders.forEach (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:127051:14) at Observable._subscribe (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:128261:25) at Observable.module.exports.Observable._trySubscribe (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:59642:25) at Observable.module.exports.Observable.subscribe (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:59628:22) at scheduleTask (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:168196:32) at Observable._subscribe (C:\Users\Frederico\Documents\Projects\beatstars-marketplace-v2\dist\server.js:168234:13)

我使用的是最新版本的 Angular 6。这是我的 package.json。

npm run build:prod - 用于构建 npm run server - 服务

 {
   "name": "project-name",
   "version": "0.1.105",
   "license": "MIT",
   "scripts": {
     "ng": "ng",
     "start": "ng serve --host 0.0.0.0 --port 8888 --disable-host-check",
     "dev": "ng serve",
     "hmr": "ng serve --hmr -e=hmr",
     "local": "ng serve --environment=local",
     "mock-api-dev": "concurrently \"ng serve\" \"node api/api.js\"",
     "test": "ng test",
     "lint": "ng lint",
     "e2e": "ng e2e",
     "build:server:prod": "ng run beatstars-marketplace-v2.1:server && webpack --config webpack.server.config.js --progress --colors",
     "build:browser:prod": "ng build --prod",
     "build:prod": "npm run build:server:prod && npm run build:browser:prod",
     "server": "node local.js"
   },
  "private": true,
  "dependencies": {
     "@angular/animations": "6.1.2",
     "@angular/cdk": "^6.4.2",
     "@angular/common": "6.1.2",
     "@angular/compiler": "6.1.2",
     "@angular/core": "6.1.2",
     "@angular/forms": "6.1.2",
     "@angular/http": "6.1.2",
     "@angular/material": "^6.4.2",
     "@angular/platform-browser": "^6.1.2",
     "@angular/platform-browser-dynamic": "6.1.2",
     "@angular/platform-server": "^6.1.2",
     "@angular/router": "6.1.2",
     "@ng-toolkit/universal": "^1.1.41-beta.110",
     "@ngrx/effects": "^6.0.1",
     "@ngrx/store": "^6.0.1",
     "@nguniversal/express-engine": "^6.0.0",
     "@nguniversal/module-map-ngfactory-loader": "^6.0.0",
     "@ngx-share/core": "^6.0.1",
     "@swimlane/ngx-charts": "^9.0.0",
     "@types/algoliasearch": "^3.27.5",
     "algoliasearch": "^3.29.0",
     "body-parser": "latest",
     "canvas-toBlob": "^1.0.0",
     "compression": "latest",
     "core-js": "^2.4.1",
     "cors": "~2.8.4",
     "cropperjs": "^1.0.0-rc",
     "d3": "^4.10.2",
     "dom-autoscroller": "^2.3.3",
     "font-awesome": "^4.7.0",
     "hammerjs": "^2.0.8",
     "lodash": "^4.17.5",
     "ng-lazyload-image": "^4.0.0",
     "ng-pick-datetime": "^5.2.6",
     "ng2-dnd": "^5.0.2",
     "ng2-dragula": "^2.0.2",
     "ng2-file-upload": "^1.2.1",
     "ngrx-store-freeze": "^0.2.0",
     "ngx-clipboard": "^11.1.1",
     "ngx-color-picker": "^6.6.0",
     "ngx-cookie": "^4.0.1",
     "ngx-editor": "3.2.1",
     "ngx-infinite-scroll": "^6.0.1",
     "ngx-page-scroll": "^5.0.0",
     "ngx-slick": "^0.2.0",
     "reselect": "^3.0.0",
     "rxjs": "^6.2.2",
     "rxjs-compat": "^6.2.2",
     "ts-loader": "4.2.0",
     "webpack-cli": "^2.1.4",
     "zone.js": "^0.8.26"
   },
   "devDependencies": {
     "@angular-devkit/build-angular": "~0.7.2",
     "@angular/cli": "6.1.2",
     "@angular/compiler-cli": "6.1.2",
     "@angularclass/hmr": "^2.1.3",
     "@types/compression": "^0.0.36",
     "@types/cors": "^2.8.4",
     "@types/cropperjs": "^1.1.1",
     "@types/d3": "^4.10.1",
     "@types/hammerjs": "^2.0.34",
     "@types/jasmine": "^2.5.47",
     "@types/lodash": "^4.14.104",
     "@types/node": "^7.0.12",
     "@types/uuid": "^3.4.3",
     "@types/youtube": "^0.0.30",
     "codelyzer": "^4.0.1",
     "concurrently": "^3.5.0",
     "express": "^4.15.4",
     "jasmine-core": "~2.5.2",
     "jasmine-spec-reporter": "~3.2.0",
     "karma": "~1.4.1",
     "karma-chrome-launcher": "~2.0.0",
     "karma-cli": "~1.0.1",
     "karma-coverage-istanbul-reporter": "^0.2.0",
     "karma-jasmine": "~1.1.0",
     "karma-jasmine-html-reporter": "^0.2.2",
     "prettier": "^1.14.2",
     "protractor": "~5.1.0",
     "ts-node": "^3.0.2",
     "tslint": "^5.7.0",
     "tslint-eslint-rules": "^4.1.1",
     "typescript": "2.9.2"
   }
}

无法弄清楚可能是什么问题。

也许还有更多信息。这是在 server.js 中发生错误的地方(if (value.length === 0)):

HttpHeaders.prototype.applyUpdate = function (update) {
    var key = update.name.toLowerCase();
    switch (update.op) {
        case 'a':
        case 's':
            var value = update.value;
            if (typeof value === 'string') {
                value = [value];
            }
            if (value.length === 0) {
                return;
            }
            this.maybeSetNormalizedName(update.name, key);
            var base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];
            base.push.apply(base, Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spread */ "d"])(value));
            this.headers.set(key, base);
            break;
        case 'd':
            var toDelete_1 = update.value;
            if (!toDelete_1) {
                this.headers.delete(key);
                this.normalizedNames.delete(key);
            }
            else {
                var existing = this.headers.get(key);
                if (!existing) {
                    return;
                }
                existing = existing.filter(function (value) { return toDelete_1.indexOf(value) === -1; });
                if (existing.length === 0) {
                    this.headers.delete(key);
                    this.normalizedNames.delete(key);
                }
                else {
                    this.headers.set(key, existing);
                }
            }
            break;
    }
};

有什么帮助吗?

最佳答案

我遇到了类似的问题,因为我试图将 null 设置为 header 的值。

你应该看看说明

this.headers.set(key, existing);
...
this.headers.set(key, base);

并确保 existingbase 不为空。

关于angular - HttpHeaders.applyUpdate 'Cannot read property ' 长度'未定义' Angular 通用服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795321/

相关文章:

angular - 将 ngModel 绑定(bind)到动态复选框列表 : Angular 2/Typescript

javascript - Angular2 ngFor - 设置选中

javascript - Webpack Dev Server 不热重载,需要手动构建 webpack

javascript - 如何使用 Webpack 将变量写入我的代码?

windows-7 - ng 不被识别为内部或外部命令

angular - 如何使用 Angular CLI 修改自动生成的包路径

javascript - NX 工作区,如何使用 cli 更改 Angular 应用程序名称?

javascript - Angular 4同步动画

css - 如何防止 'postcss-preset-env' 删除 CSS 逻辑属性?

angular - 如何将模态模板的 let-c ="close"传递给其他组件的 html angular 5