【问题标题】:Cannot serve angular 2 index.html file from express server due to path relativity issue由于路径相对性问题,无法从快速服务器提供 angular 2 index.html 文件
【发布时间】:2017-07-08 13:15:30
【问题描述】:

这是我的应用程序文件夹结构,带有 angular-client 文件夹

下图显示了当我从 express 服务器服务器 angular 应用程序的索引文件时,所有获取都相对于 express 服务器应用程序的问题。

这是 index.js 服务器代码

var express = require('express');
var app = express();
var path = require('path');


app.listen(3000,function(){
console.log('Server started on port 3000');
});

app.get('/',function(req,res){
res.sendFile(path.join(__dirname,'angular-client')+'/src/index.html');
});

有人能找到解决办法吗?

【问题讨论】:

  • 我看了上面的问题,不一样。提供索引文件时,在 angular 文件夹中,引用的 js 和 css 文件是相对于根 express 文件夹的。但是给出的路径是相对于 angular 文件夹的。我检查了很多例子。所有的索引文件都在 src 文件夹之外。或者他们有两台服务器,一台用于角度和其他文件夹节点,它们独立运行。
  • 尝试使用类似“../../node_modules/*”的路径

标签: javascript angularjs node.js express mean-stack


【解决方案1】:

您图片中的路由仅处理GET /(并提供index.html 作为响应)。

首先,例如,您需要一条捕获GET /styles.css 的路线。然后你需要让它以styles.css 作为响应。

express.static 为您完成这两件事(请参阅链接中的文档)。

假设您从TODOMEANAPP 目录运行node server.js(而不是node TODOMEANAPP/server.js),以下代码应该可以工作:

app.use(express.static('angular-client'));

但是,您必须将 href="styles.css" 更改为 href="src/styles.css" 并将 src="systemjs.config.js" 更改为 src="src/systemjs.config.js"

【讨论】:

  • 其实并不是所有 index.html 中的文件调用都应该是 src/ 。但是,接下来会发生的是应用程序组件和模块是相对于服务器根而不是角度根调用的。
  • zone.js:1960 GET localhost:3000/src/app/app.module 404(未找到)。这是我得到的错误。
  • 来自 express.static 文档:“您提供给 express.static 函数的路径相对于您启动节点进程的目录”。假设您从TODOMEANAPP 运行node server.js。假设您请求GET src/styles.css。它会点击app.useexpress.static 会将src/styles.css 附加到TODOMEANAPP/angular-client 并因此查找TODOMEANAPP/angular-client/src/styles.css,这是您目录中的一个文件,因此它将将该文件作为响应。
  • 但是,如果正在服务的文件调用相对于其位置的其他文件,例如 index.html 文件,则会产生问题。我认为将 js 文件捆绑并提取到公共文件夹然后提供此文件夹将解决问题。
猜你喜欢
  • 2019-02-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
相关资源
最近更新 更多