Angular SSR localhost:4000 未打开

2024-01-08

我有一个 Angular 项目,我想让它兼容 seo。我使用 Angular Universal 执行此操作,但 localhost: 4000 无法打开。当我输入 localhost:4000/index.html 时,它会打开并重定向到 localhost:4000。但是,页面源代码显示为 .所以它没有发生。

我心想:“我是不是做错了什么?”我问。另一个新的 Angular 项目创建了与我在其上创建的相同操作,运行没有问题。

但是,它在我当前的项目中不起作用。

我的文件是这样的;

// 服务器.ts

import 'zone.js/dist/zone-node';
import {enableProdMode} from '@angular/core';
// Express Engine
import {ngExpressEngine} from '@nguniversal/express-engine';
// Import module map for lazy loading
import {provideModuleMap} from '@nguniversal/module-map-ngfactory-loader';

import * as express from 'express';
import {join} from 'path';

// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();

// Express server
const app = express();

const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(process.cwd(), 'dist/browser');

// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');

// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
app.engine('html', ngExpressEngine({
  bootstrap: AppServerModuleNgFactory,
  providers: [
    provideModuleMap(LAZY_MODULE_MAP)
  ]
}));

app.set('view engine', 'html');
app.set('views', DIST_FOLDER);

// Example Express Rest API endpoints
// app.get('/api/**', (req, res) => { });
// Serve static files from /browser
app.get('*.*', express.static(DIST_FOLDER, {
  maxAge: '1y'
}));

// All regular routes use the Universal engine
app.get('*', (req, res) => {
  res.render('index', { req });
});

// Start up the Node server
app.listen(PORT, () => {
  console.log(`Node Express server listening on http://localhost:${PORT}`);
});

// webpack.server.config.js

// Work around for https://github.com/angular/angular-cli/issues/7200

const path = require('path');
const webpack = require('webpack');

module.exports = {
  mode: 'none',
  entry: {
    // This is our Express server for Dynamic universal
    server: './server.ts'
  },
  target: 'node',
  resolve: { extensions: ['.ts', '.js'] },
  optimization: {
    minimize: false
  },
  output: {
    // Puts the output at the root of the dist folder
    path: path.join(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      { test: /\.ts$/, loader: 'ts-loader' },
      {
        // Mark files inside `@angular/core` as using SystemJS style dynamic imports.
        // Removing this will cause deprecation warnings to appear.
        test: /(\\|\/)@angular(\\|\/)core(\\|\/).+\.js$/,
        parser: { system: true },
      },
    ]
  },
  plugins: [
    new webpack.ContextReplacementPlugin(
      // fixes WARNING Critical dependency: the request of a dependency is an expression
      /(.+)?angular(\\|\/)core(.+)?/,
      path.join(__dirname, 'src'), // location of your src
      {} // a map of your routes
    ),
    new webpack.ContextReplacementPlugin(
      // fixes WARNING Critical dependency: the request of a dependency is an expression
      /(.+)?express(\\|\/)(.+)?/,
      path.join(__dirname, 'src'),
      {}
    )
  ]
};

// tsconfig.app.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

// tsconfig.server.json

{
  "extends": "./tsconfig.app.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app-server",
    "baseUrl": "./"
  },
  "angularCompilerOptions": {
    "entryModule": "app/app.server.module#AppServerModule"
  }
}

// 包.json

{
  "name": "my-project",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "build:ssr": "npm run build:client-and-server-bundles && npm run compile:server",
    "serve:ssr": "node dist/server",
    "build:client-and-server-bundles": "ng build --prod && ng run my-project:server:production",
    "webpack:server": "webpack --config webpack.server.config.js --progress --colors",
    "compile:server": "webpack --config webpack.server.config.js --progress --colors"
  },
  "private": true,
  "dependencies": {
    "@agm/core": "^1.0.0-beta.5",
    "@angular/animations": "^7.2.7",
    "@angular/cdk": "^7.0.0",
    "@angular/common": "^7.2.7",
    "@angular/compiler": "^7.2.7",
    "@angular/core": "^7.2.7",
    "@angular/forms": "^7.2.7",
    "@angular/http": "^7.2.7",
    "@angular/material": "^7.0.0",
    "@angular/platform-browser": "^7.2.7",
    "@angular/platform-browser-dynamic": "^7.2.7",
    "@angular/platform-server": "^7.2.7",
    "@angular/router": "^7.2.7",
    "@ng-bootstrap/ng-bootstrap": "^3.3.1",
    "@ng-select/ng-select": "^2.10.5",
    "@nguniversal/express-engine": "^7.1.0",
    "@nguniversal/module-map-ngfactory-loader": "^7.1.0",
    "@progress/kendo-angular-treeview": "^2.5.0",
    "angular-tree-component": "^8.0.1",
    "angular2-text-mask": "^9.0.0",
    "bootstrap": "^4.1.3",
    "core-js": "^2.5.4",
    "express": "^4.15.2",
    "jquery": "^3.3.1",
    "ng2-ckeditor": "^1.2.1",
    "ng2-image-viewer": "^2.0.1",
    "ng2-pdf-viewer": "^5.2.3",
    "ngx-card": "^0.2.4",
    "ngx-owl-carousel": "^2.0.7",
    "ngx-toastr": "^9.1.0",
    "primeicons": "^1.0.0",
    "primeng": "^7.0.3",
    "rxjs": "^6.4.0",
    "ts-loader": "^5.3.3",
    "tslib": "^1.9.0",
    "webpack-cli": "^3.2.3",
    "zone.js": "^0.8.29"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular/cli": "~7.3.3",
    "@angular/compiler-cli": "^7.2.7",
    "@angular/language-service": "^7.2.7",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~1.4.2",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.1",
    "ts-loader": "^5.2.0",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1",
    "typescript": "~3.2.4",
    "webpack-cli": "^3.1.0"
  }
}

我在 webpack.server.config.js 的 module.exports 中尝试了模式:“生产”和模式:“开发”。 没有发生。

可能是什么问题呢?我在一个新项目中执行相同的操作运行顺利,但它不适用于我当前的项目。

Thanks.


我试图通过一一删除所有 3rd 方软件包来找到导致问题的软件包。 我没有从他们中得到任何结果。

我在主页上设置了间隔。我没有得到结果。

我确信我的 server.ts 和其他配置文件是正确的,因为当我从头开始创建一个新项目时它们工作正常。这就是为什么我没有提出问题。

虽然我把主页上的代码全部删除了,但是还是打不开。

4天后我解决了我的问题。 token = localStorage.getItem('token');在我的 Auth.Interceptor 文件中;由于 localStorage,我遇到了这些问题。

import { Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser, isPlatformServer } from '@angular/common';
constructor(@Inject(PLATFORM_ID) private _platformId: Object) { }


if (isPlatformBrowser(this._platformId)) {
   token = localStorage.getItem('token');
}

这样做之后,我能够访问localhost:4000。当然,localstorage、window、setTimeout、document等命令中的所有文件都给出了错误。我通过使用上面“if”中的这些命令获取所有行来解决了我的整个问题。

Thanks.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular SSR localhost:4000 未打开 的相关文章

随机推荐

  • 使 Http DefaultClient 的execute()非常慢

    我的 HttpDefaultClient 的 execute 方法的执行方法存在大量性能问题 我目前正在使用它来将数据发布到服务器 接收 JSON 并反序列化数据 我的手机打电话需要 8 到 30 秒 如果我切换到 Wifi 速度相当快 在
  • Wix:安装过程中忽略对话框中的属性更改

    我在 Wix 文件中有一个属性 该属性公开用于在对话框中进行编辑 在下面的示例中 它是 MyProperty 该属性用于创建注册表项 但是 如果在对话框中更改属性 则不会使用更改后的值 而是默认值 SomeProperty 但是 如果我在另
  • Python 多处理问题?

    我有一个包含 500 个输入文件的文件夹 所有文件的总大小约为 500 MB 我想写一个python执行以下操作的脚本 1 将所有输入文件加载到内存中 2 初始化一个空的python稍后将使用的列表 参见项目符号 4 3 启动 15 个不同
  • 如何使用 Huggingface Trainer 微调 gpt-j

    我正在尝试使用 Huggingface 训练器微调 gpt j 但惨败 我遵循了引用 bert 的示例 但是当然 gpt j 模型并不完全类似于 bert 模型 该错误表明模型没有产生损失 这很好 但我不知道如何让它产生损失或如何改变训练者
  • 如何在postgresql中使用for循环创建多个表

    如何使用一个表创建多个表forpostgresql 中的循环 例如 我需要创建 c emloyee r employee i employee 等 我在 FOR 附近遇到语法错误 bin sh Invoke postgre SQLVARCH
  • 将流拆分为具有 N 个元素的子流

    我们能否以某种方式将 Java 中的流拆分为不超过 N 个元素的子流 例如 Stream
  • 如何在.NET中编辑EXIF数据[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个照片库 共享网站 并且想要 1 将 EXIF 数据写入服务器上存储的 JPEG 以及 2
  • npm install 正在我的角度项目根目录中构建 .cmd 文件

    我有一个项目已经工作了很长一段时间 它已经构建和编译 并且仍然在不同的机器上执行 了几个月 现在 当我运行命令 npm install 时 它会正常运行 但在该过程结束时 它会在我的项目的根文件夹中构建大量 cmd 文件 以及另一个附带文件
  • 根据条件从列表中删除项目

    我有一个这样的结构 public struct stuff public int ID public int quan 并想要删除该产品ID is 1 我目前正在尝试这个 prods Remove new stuff prodID 1 它不
  • 如何在 Docker Compose V3 中扩展服务?

    我有一个docker compose yml看起来像 version 2 services redis image redis mysqldb image mysql 5 7 environment MYSQL ROOT PASSWORD
  • blogger+video.js 我如何添加质量级别,如 1080p、720p、480p

    我在我的中添加 video jshttps www blogger com https www blogger com网站 但我如何添加 1080p 720p 480p 等质量级别 我添加的代码 在头 在身体里
  • Angular 2 - 链接 http 请求

    我从 httpService 获取 RxJS Observable 这是来自 Angular 的实际 http 现在 一旦我得到积极的结果 我想处理我得到的下一个 http 请求this retrieve 这或多或少是串联请求 有更好的方法
  • 有没有办法为函数创建预处理器宏?

    是否可以根据函数结果创建 C 预处理器宏 例如 我想在预处理器宏定义中动态保存屏幕高度 define SCREEN HEIGHT GetSystemMetrics SM CYVIRTUALSCREEN 然后我想使用结果根据屏幕高度设置值 i
  • Spring Boot,如何在不使用 ldif 的情况下使用 LDAP 进行身份验证?

    我正在 Spring Boot 中尝试 LDAP 身份验证示例here https spring io guides gs authenticating ldap 它使用 ldif 方法 我认为该方法不适用于我的要求 因为我们的 ldap
  • 在变量中存储 const 值与在状态中存储 const 值有区别吗?

    我注意到有几种方法可以在 React 功能组件中实现看似相同的事情 当您拥有本质上仅在该组件内部需要的配置值 只是一个常量值 从未传入或修改 时 您可以只使用常规const或者您可以将其存储在组件的状态中 标准变量 function Exa
  • 附加到 Visual Studio Express 2013 for Web 中的进程

    我刚刚从 VS 2010 professional 升级到 VS 2013 Express for Web 但找不到 附加到进程 选项 该选项允许我调试托管在 IIS Web 服务器上的 Web 应用程序 该选项在 Windows 版 VS
  • 为什么 .Net 中的类默认不可序列化?

    开发人员必须通过显式使用来 选择 使类可序列化SerializableAttribute 如果类默认是可序列化的 会出现什么问题 我假设默认情况下类是不可序列化的 因为无法保证使用反射将对象的状态转储到流中是否有意义 如果您的对象拥有与数据
  • 在已弃用的 THREE.ImageUtils.loadTexture 上使用 THREE.TextureLoader 时出现纹理问题

    我正在使用这个函数在圆柱体上添加纹理 function createElementMaterial THREE ImageUtils crossOrigin var t THREE ImageUtils loadTexture IMG MA
  • 该类型存在于两个 DLL 中

    我想使用 Accord 库和 AForge 库中的一些东西 但是当我安装它时 我开始收到以下错误 Error CS0433 The type IntPoint exists in both AForge Version 2 2 5 0 Cu
  • Angular SSR localhost:4000 未打开

    我有一个 Angular 项目 我想让它兼容 seo 我使用 Angular Universal 执行此操作 但 localhost 4000 无法打开 当我输入 localhost 4000 index html 时 它会打开并重定向到