Javascript 设置带有角度的Express

Javascript 设置带有角度的Express,javascript,angularjs,node.js,express,Javascript,Angularjs,Node.js,Express,我可以使用ASP/Visual Studio轻松地在web应用程序中设置Angular,但我想进入节点世界,更具体地说是Express。我并不真正理解Express的基本路由处理程序,它将支持Angular所拥有的范例 例如,在设置Express文件时,有一百万个示例,但几乎所有示例都使用Jade作为模板,我反对Jade的语法,也不想使用它 到目前为止,我已经为我的Express服务器准备了这个(我已经注释了一些关于我目前所做决定的问题): var express=require('expres

我可以使用ASP/Visual Studio轻松地在web应用程序中设置Angular,但我想进入节点世界,更具体地说是Express。我并不真正理解Express的基本路由处理程序,它将支持Angular所拥有的范例

例如,在设置Express文件时,有一百万个示例,但几乎所有示例都使用Jade作为模板,我反对Jade的语法,也不想使用它

到目前为止,我已经为我的Express服务器准备了这个(我已经注释了一些关于我目前所做决定的问题):

var express=require('express'),
路径=要求(“路径”);
var-app=express();
var env=process.env.NODE|env | |“development”;
//1)如果我要在视图中使用角度布线,这真的有必要吗?
app.set('views',path.join('u_dirname',/app/views');
app.use(express.static(uu dirname+/public));
//2)我假设这是利用角度的理想模式。
//一个提供html文件的全面处理程序,该文件将
//把剩下的布线交给Angular?
app.get('*',函数(req,res){
res.sendFile(path.join(_dirname+'/public/index.html');
});
常数端口=3000;
app.listen(端口);
log('侦听端口:'+端口);
我的问题是:

  • app.set('views',…)
    是通过Express在Angular应用程序中必需的,还是真正用于Jade/EJS模板工作流?如果有助于确定角度,我应该将其指向什么路径?我的视角?或者只是作为所有角度视图的容器的静态html文件

  • 我假设仍然需要
    app.use(express.static(…)
    来确保express能够提供公共静态资源,比如css/javascript

  • app.get('*',…){res.sendFile('path/to/index.html')}
    route处理程序是否是提供一个html文件的可接受模式,该文件将包含所有必要的用法

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

app.set('views',…)
是通过Express在Angular应用程序中必需的,还是真正用于Jade/EJS模板工作流?如果有助于确定角度,我应该将其指向什么路径?我的视角?或者只是作为所有角度视图的容器的静态html文件

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

我假设仍然需要
app.use(express.static(…)
来确保express能够提供公共静态资源,比如css/javascript

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

app.get('*',…){res.sendFile('path/to/index.html')}
route处理程序是否是提供一个html文件的可接受模式,该文件将包含所有必要的用法

如果对于前一个路由未捕获的每一个请求,您需要发送完全相同的文件,可以

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

然而,我相信定义所有路由是一个好的实践,而不是仅仅放置一个
*
来捕获它们。最好至少定义一个模式,以后维护代码会更容易

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

取决于您的应用程序。在大多数情况下是的

我已经做了几个大型的angular项目,我只有一个路由实际上服务于主html文件,还有一个路由服务于静态文件(图片、js、css)。我还有一个指向
templates
目录的路由,该目录应该作为静态内容使用。这些是AngularJS需要使用的模板

对于angular应用程序和服务器之间的通信,您可能还需要其他路由。您可以创建RESTfulAPI端点,为客户机和服务器创建通信层

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

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
另外,看看。

只要读一读就可以了