Javascript 客户机-服务器体系结构(带有节点js)-index.html文件放在哪里?

Javascript 客户机-服务器体系结构(带有节点js)-index.html文件放在哪里?,javascript,angularjs,node.js,architecture,Javascript,Angularjs,Node.js,Architecture,我已经构建了一个服务器客户端应用程序(nodejs-在服务器上,angular-在客户端) 我曾经将所有代码都放在一个项目(一个文件夹)中,但后来我发现,按逻辑将其划分为服务器文件夹和客户端文件夹对我来说更有意义 我渴望断开服务器代码和客户机代码之间的所有依赖关系,因为每一方都可以独立运行 问题: 我应该把index.html放在哪里 它显然与客户端相关,但服务器(expressJS)在加载服务器时正在加载它 假设我将index.html文件放在客户机文件夹中,如下图所示 如何让server.j

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

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

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

问题:

  • 我应该把index.html放在哪里 它显然与客户端相关,但服务器(expressJS)在加载服务器时正在加载它

  • 假设我将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')));
    });
    

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

    如果要为客户端安装模块,请转到终端中的
    '/client/node\u modules'
    目录并运行npm。因此,如果您是linux,那么:

  • cd客户端/
  • npm init
  • npm安装所需的模块

  • 如果是服务器端模块,请在根目录中安装模块,通常使用express apps,您将拥有一个“公共”文件夹,其中包含客户端资产,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))
      to
      app.use('/',express.static(path.join(uu dirname,'/public'))
    请注意:
    app.use('/',express.static(_dirname))应该避免,因为您正在向公众提供整个服务器目录

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

    Yeoman帮助您启动新项目,制定最佳实践 以及帮助您保持生产力的工具


    您是否尝试过
    app.use('/',express.static(uu dirname+'/../client')?您不必声明
    app.get(“/”,…
    首先谢谢。它起作用了…第二-index.html这个名字被取消了?如果我想用我的index.html怎么办?我不知道你想访问url localhost:8080并得到页面
    my index.html
    作为响应?在这种情况下,你为什么不按index.html重命名你的文件?是的“index.html”默认情况下,express static将检查
    public
    文件夹中的“index.html”文件。如果您想将“/”路由到“my_index123.html”,我将查看更像这样的设置:谢谢,但是如果我将节点模块放在客户机中,那么属于服务器的所有模块(即mongodb…)呢?将这些模块安装到根目录中感谢您解决了这个问题。还有一个问题-我的客户端(angular)除了服务器上的npm模块之外还使用依赖项(客户端模块仅为客户端代码而关联,即angularAuth库)。我应该有npm模块目录(或者可能是bower模块)同样,在客户端?:D您有2个选项:1,创建一个“bower.rc”文件,将安装目录设置为
    public/bower\u components
    ,并从那里为用户资产提供服务。或者2.添加另一个express static行,以从
    bower\u components
    提供资产,这两个选项都可以接受。
    app.use('/',express.static(path.join(__dirname, '/public')));