【问题标题】:client - server architecture structure (with node js) - where to put the index.html file?客户端 - 服务器架构结构(使用节点 js) - 将 index.html 文件放在哪里?
【发布时间】:2017-05-21 08:29:26
【问题描述】:

我已经构建了一个服务器客户端应用程序(nodejs - 在服务器上,angular - 在客户端上)。

我曾经将所有代码都放在一个项目(一个文件夹)中,但后来我认为按逻辑将其划分为服务器文件夹和客户端文件夹更有意义。

我渴望断开服务器代码和客户端代码之间的所有依赖关系,因为每一方都可以独立存在。

问题:

  1. 我应该把 index.html 放在哪里?

显然与客户端有关,但服务器(expressJS)在服务器时加载它。

  1. 让我说我把这个 index.html 文件放在客户端文件夹中,如下图所示..

如何让 server.js 意识到这一点?

此代码不起作用:

var app = express();
app.use(bodyParser.json());
app.use('/',express.static(__dirname));

app.use('/scripts', express.static(path.join(__dirname,
    'node_modules')));

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

【问题讨论】:

  • 你试过app.use('/', express.static(__dirname + '/../client')); 吗?你不必声明app.get('/', ....
  • 首先感谢。它工作......第二 - 名称 index.html 是默认的?如果我想使用 my_index123.html 怎么办?
  • 我不明白您想访问 url localhost:8080 并获取页面 my_index123.html 作为响应?在这种情况下,你为什么不通过 index.html 重命名你的文件呢?
  • 是 "index.html" 是默认的,express static 将检查 public 文件夹中的 "index.html" 文件。如果你想将“/”路由到“my_index123.html”,我会看看一个更像这样的设置:scotch.io/tutorials/use-expressjs-to-deliver-html-files

标签: javascript angularjs node.js architecture


【解决方案1】:
var app = express();
app.use(bodyParser.json());
app.use('/',express.static(__dirname));

//it will serve all files in client directory under the '/' route        
app.use('/', express.static(path.join(__dirname, '/client'));
});

//and the client side scripts installed through npm will be served under '/scripts' route
app.use('/scripts', express.static(path.join(__dirname, '/client/node_modules')))

最好在单独的文件夹中提供客户端模块,即在client 目录中也有node_module 文件夹,您应该在那里安装应该从客户端加载的所有模块。除此之外,client 文件夹似乎是公开的,因此值得为整个文件夹提供服务。

如果您想为客户端安装模块,请转到终端中的'/client/node_modules' 目录并运行 npm。所以如果你是linux,那么:

  1. cd client/
  2. npm init
  3. npm install YOUR_DESIRED_MODULE

如果是服务器端的模块,则在根目录中安装模块

【讨论】:

  • 谢谢,但是如果我将节点模块放在客户端中,那么属于服务器的所有模块(即 mongodb..)呢?
  • 在根目录下安装模块
【解决方案2】:

通常对于快速应用程序,您将拥有一个包含您的客户端资产的“公共”文件夹,index.html 就是其中之一。

app.use('/',express.static(path.join(__dirname, '/public')));

然后,运行节点服务器,打开浏览器并将其指向该服务器,express 将从“public”文件夹中提供“index.html”。

修复步骤

  • client 文件夹重命名为public
  • public 拖入server 文件夹,使其类似于server/public
  • app.use('/',express.static(__dirname)); 更改为app.use('/', express.static(path.join(__dirname, '/public')));

请注意:应避免使用app.use('/',express.static(__dirname));,因为您将整个服务器目录提供给公众。

如果您想更好地了解项目布局。 看看 yoeman.io,特别是它有 express 的项目模板。

http://yeoman.io/

Yeoman 帮助您启动新项目,制定最佳实践 以及帮助您保持高效的工具。

【讨论】:

  • 感谢您清除此问题。还有一个问题-我的客户端(angular)除了服务器的npm模块(仅用于客户端代码的客户端模块,即angularAuth库)之外,还使用依赖项。我应该在客户端也有 npm 模块目录(或者可能是 bower 模块)吗?
  • :D 你有两个选择:1,创建一个“bower.rc”文件,将安装目录设置为public/bower_components,并从那里提供用户资产。或 2. 添加另一个快速静态行以提供来自bower_components 的资产,这两种方法都可以接受。
猜你喜欢
  • 2011-07-09
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多