您的位置:首页 > 其它

Express学习之开始入门<2>

2015-09-29 21:53 363 查看
四.基本的路由(routing)教程

这篇教程是对Express路由的基本介绍,路由适用于决定Express应用该如何对客户端发来的对特定网址 [endpoint(表示API的具体网址):指的是一个URL(或者路径)和一个特定的HTTP请求方法] 的请求进行回复。

每个路由可以有一个或者多个处理器函数,当请求的URL搭配这些路由的时候,这个/些函数就会被执行。

路由以下面的格式进行定义:
app.METHOD(PATH, HANDLER)
,来解释下这几个名词的意思:

app
:是Express应用的实例

METHOD
:指的是HTTP请求的方法(包括
GET
POST
等)

PATH
:是服务器上的一个路径

HANDLER
:这是一个函数,当客户端请求的URL搭配路由的时候,就会执行这个函数。

// 在主页上回复"Hello World!"
app.get('/', function (req, res) {
res.send('Hello World!');
});

// 在主页上接受post请求
app.post('/', function (req, res) {
res.send('Got a POST request');
});

// 在"/user"路径上接受put请求
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});

// 在"/user"接受delete请求
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user');
});


如果想获取更多关于路由的详情,请咨询路由指南

五.Express中的静态文件

在Express内建的中间件
express.static
的帮助下,我们就能很好地管理
iamges
JavaScript
CSS
和其他的静态文件。

把将要作为静态资源的目录名称传递给中间件
express.static
来直接管理文件。如果你把
iamges
JavaScript
CSS
这些文件放在
public
目录下,你可以这样做:

app.use(express.static('public'));


现在你可以加载
public
目录下的文件:

http://localhost:3000/images/kitten.jpg http://localhost:3000/css/style.css http://localhost:3000/js/app.js http://localhost:3000/images/bg.png http://localhost:3000/hello.html


寻找文件是相对于静态资源目录的,因此,静态资源目录的名字不是URL的一部分。

如果你想要多个目录作为静态资源的目录,你可以多次调用中间件
express.static


app.use(express.static('public'));
app.use(express.static('files'));


静态文件将会以使用中间件
express.static
设置静态资源目录的顺序被搜索。

如果你想为静态文件创建一个虚拟的路径前缀的话,你可以为静态资源目录声明一个顶层路径名称。

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


现在,你可以以从路径前缀 “/static”中加载
public
目录下的静态文件了。

http://localhost:3000/static/images/kitten.jpg http://localhost:3000/static/css/style.css http://localhost:3000/static/js/app.js http://localhost:3000/static/images/bg.png http://localhost:3000/static/hello.html


但是你提供给中间件
express.static
的路径是相对于你开启node进程所在的目录,如果你在另一个目录中运行Express应用的话,使用资源目录的绝对路径是安全的。

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


六.常问的问题(FAQ)

1.如何构建应用的框架呢?

这个问题没有绝对的答案,取决于你所创建应用和团队的规模。为了尽可能地灵活,Express对应用框架并没有做出假设。

路由和应用的其他特定逻辑可能放在你希望的大量文件中,以你偏好的目录结构。看以下的例子寻找灵感。

Route listings

Route map

MVC style controllers

当然,Express也有第三方扩展,简化了一些模式:

Resourceful routing

2.如何定义模型?

Express没有数据库的概念,这个就留给了Node.js的第三模块,第三方模块会允许你与任何一种数据库进行交互。

看一下基于Express的框架 LoopBack,该模块关注模型数据。

3.如何验证用户?

这是另一个Express没有设计的领域,你可以使用任何你想要使用的验证方案,对于一个简单的”用户/密码”解决方案,请看 这个例子

4.Express支持哪种模版?

Express支持任何遵守签名规则
(path, locals, callback)(函数签名)
的模版引擎。为了规范化模版引擎的接口和缓存,请看consolidate.js寻求支持。未列出的模版引擎可能也支持Express签名。

5.如何处理404s?

在Express中,404s并不是错误引起的。因此,处理错误的中间件并不会捕获404s。这是因为404只是额外工作的缺失;换句话说,Express执行了所有的中间件和路由,发现没有一个相应,你所要做的就在在最底部添加一个中间件来处理404:

app.use(function(req, res, next) {
res.status(404).send('Sorry cant find that!');
});


6.如何设置一个错误处理器

以其它中间件的格式,你定义一个中间件,不过你定义的这个中间件是四个参数,而其它中间件是三个参数。使用函数签名
(err, req, res, next)
来定义:

app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});


更多的信息,请看 Error handling

7.该如何渲染HTML?

不要这样做!没必要使用
res.render()
来渲染HTML。如果你有具体的文件,请使用
res.sendFile()
。如果你要使用目录中的许多资源文件,使用
express.static()
中间件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: