Express学习之开始入门<2>

四.基本的路由(routing)教程

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

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

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

  • app:是Express应用的实例
  • METHOD:指的是HTTP请求的方法(包括GETPOST等)
  • 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的帮助下,我们就能很好地管理iamgesJavaScriptCSS和其他的静态文件。

把将要作为静态资源的目录名称传递给中间件express.static来直接管理文件。如果你把iamgesJavaScriptCSS这些文件放在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对应用框架并没有做出假设。

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

当然,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()中间件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值