当前位置:  开发笔记 > 编程语言 > 正文

用Angular设置Express

如何解决《用Angular设置Express》经验,为你挑选了1个好方法。

我可以很容易地使用ASP/Visual Studio在我的Web应用程序中设置Angular,但我想进入Node世界,更具体地说是Express.我并不是真正理解Express的基本路由处理程序,它将支持Angular的范例.

例如,在设置Express文件时,有一百万个例子,但几乎所有的例子都使用Jade进行模板化,而且我反对Jade的语法并且不想使用它.

到目前为止,我已经为我的Express服务器提供了这个(我已经评论了一些关于我目前做出的决定的问题):

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

var app = express();

var env = process.env.NODE_ENV || 'development';

// 1) Is this really necessary if I'm going to utilize Angular routing for views?
app.set('views', path.join(__dirname, '/app/views'));
app.use(express.static(__dirname + '/public'));

// 2) I'm assuming this is the desired pattern for utilizing Angular.
//  A catch-all handler that serves up an html file, which will then
//  hand off the rest of the routing to Angular?
app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname + '/public/index.html'));
});

const PORT = 3000;
app.listen(PORT);
console.log('Listening on port: ' + PORT);

我的问题是:

app.set('views', ...)通过Express在Angular应用程序中是否有必要,或者它是否真的适用于Jade/EJS模板工作流程?如果它对Angular有用,我应该指向哪条路径?我的Angular观点?或者只是静态html文件,它将作为所有角度视图的容器?

我认为app.use(express.static(...))仍然需要确保Express可以提供公共静态资源,如css/javascript.

app.get('*', ...) { res.sendFile('path/to/index.html') }路由处理程序是否可用于提供一个html文件,该文件将包含所有必需的Angular用法?

对于Angular,只有一个html文件用于整个应用程序是正常的,然后只使用Angular的路由和控制器/视图来处理其余的?

Aᴍɪʀ.. 5

app.set('views', ...)通过Express在Angular应用程序中是否有必要,或者它是否真的适用于Jade/EJS模板工作流程?如果它对Angular有用,我应该指向哪条路径?我的Angular观点?或者只是静态html文件,它将作为所有角度视图的容器?

如果需要在服务器端呈现视图然后将其发送到客户端,则需要这样做.否则(在你的情况下)没有.您只需将文件发送给用户,或根据用户发送到服务器的参数生成特定于用户的输出.它可以是任何东西,HTML文件,json或只是简单的文本.

我认为app.use(express.static(...))仍然需要确保Express可以提供公共静态资源,如css/javascript.

你是对的.如果您还需要提供静态内容,最好的方法是使用express.static,但是您可以自己捕获请求并提供内容.

app.get('*', ...) { res.sendFile('path/to/index.html') }路由处理程序是否可用于提供一个html文件,该文件将包含所有必需的Angular用法?

如果对于之前路由没有捕获的每个其他请求,您需要发送完全相同的文件,是的,它没关系.

请记住,如果您需要将其他HTML文件作为模板提供,并且它们与您指向的目录不在同一目录中express.static,则客户端无法访问html文件.我会稍微讨论一下.

但是,我认为定义所有路线是一个好习惯,而不仅仅是把*它们全部捕获.最好至少定义一个模式,稍后维护代码会更容易.

对于Angular,只为整个应用程序提供一个html文件是正常的,然后只使用Angular的路由和控制器/视图来处理其余的?

取决于您的申请.在大多数情况下是的.

我已经完成了几个大角度项目,我只有一个实际服务于主要html文件的路由,以及一个提供静态文件的路径(图片,js,css).我还有一个指向templates应该作为静态内容的目录的路由.这些是AngularJS需要使用的模板.

对于角度应用程序和服务器之间的通信,您可能还需要其他路由.您可以创建RESTful API端点,以便为客户端和服务器创建通信层.

我通常在服务器代码中有这两行,以保持所有模板在同一文件夹中.它使管理和定义工作流程变得更加容易:

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

对于服务器和客户端之间的通信:

app.post('/login', function (req, res) {
// deal with login information ...
    res.send({
        done: true,
        errors: []
    });
});

app.post('/search', function (req, res) {
    // do the search ...
    res.send({
        done: true,
        results: []
    });
});

请记住,如果您*在应用中的某个时刻使用,那么您之后定义的其他路由将永远不会捕获请求.

我反对Jade的语法并且不想使用它.

我也是!但是还有其他选择,我个人更喜欢ejs.如果您正在使用,express-generator您只需通过-e开关,它将创建与之兼容的所有内容ejs.

$ express -e

另外,看看这里.



1> Aᴍɪʀ..:

app.set('views', ...)通过Express在Angular应用程序中是否有必要,或者它是否真的适用于Jade/EJS模板工作流程?如果它对Angular有用,我应该指向哪条路径?我的Angular观点?或者只是静态html文件,它将作为所有角度视图的容器?

如果需要在服务器端呈现视图然后将其发送到客户端,则需要这样做.否则(在你的情况下)没有.您只需将文件发送给用户,或根据用户发送到服务器的参数生成特定于用户的输出.它可以是任何东西,HTML文件,json或只是简单的文本.

我认为app.use(express.static(...))仍然需要确保Express可以提供公共静态资源,如css/javascript.

你是对的.如果您还需要提供静态内容,最好的方法是使用express.static,但是您可以自己捕获请求并提供内容.

app.get('*', ...) { res.sendFile('path/to/index.html') }路由处理程序是否可用于提供一个html文件,该文件将包含所有必需的Angular用法?

如果对于之前路由没有捕获的每个其他请求,您需要发送完全相同的文件,是的,它没关系.

请记住,如果您需要将其他HTML文件作为模板提供,并且它们与您指向的目录不在同一目录中express.static,则客户端无法访问html文件.我会稍微讨论一下.

但是,我认为定义所有路线是一个好习惯,而不仅仅是把*它们全部捕获.最好至少定义一个模式,稍后维护代码会更容易.

对于Angular,只为整个应用程序提供一个html文件是正常的,然后只使用Angular的路由和控制器/视图来处理其余的?

取决于您的申请.在大多数情况下是的.

我已经完成了几个大角度项目,我只有一个实际服务于主要html文件的路由,以及一个提供静态文件的路径(图片,js,css).我还有一个指向templates应该作为静态内容的目录的路由.这些是AngularJS需要使用的模板.

对于角度应用程序和服务器之间的通信,您可能还需要其他路由.您可以创建RESTful API端点,以便为客户端和服务器创建通信层.

我通常在服务器代码中有这两行,以保持所有模板在同一文件夹中.它使管理和定义工作流程变得更加容易:

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

对于服务器和客户端之间的通信:

app.post('/login', function (req, res) {
// deal with login information ...
    res.send({
        done: true,
        errors: []
    });
});

app.post('/search', function (req, res) {
    // do the search ...
    res.send({
        done: true,
        results: []
    });
});

请记住,如果您*在应用中的某个时刻使用,那么您之后定义的其他路由将永远不会捕获请求.

我反对Jade的语法并且不想使用它.

我也是!但是还有其他选择,我个人更喜欢ejs.如果您正在使用,express-generator您只需通过-e开关,它将创建与之兼容的所有内容ejs.

$ express -e

另外,看看这里.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有