【Node.js学习】简单认识express
在前面的学习中,我们已经学会使用 Node.js 的 http 模块来构建一个最基本的 Web 服务器了。今天,我们来学习一款新的框架——Express,并学习如何通过 express 来构建一个 web 服务器。
初识 express
express 简介
Express 是一款高度包容、快速而极简的 Node.js Web 框架。但是我们已经有了 http 模块用以创建 Web 服务器,那么我们为什么还要学习 express 呢?因为内置的 http 模块是最基本的模块,使用起来较为复杂,开发效率低;而 Express 是基于 http 模块进一步封装出来的,能够极大地提高开发效率。
express 能够做什么
对于前端开发者来说,服务器一般分为两种:
- web 网站服务器:专门对外提供 web 网页资源的服务器。
- API 接口服务器:专门对外提供 API 接口的服务器。
使用 express,我们可以方便、快速地创建 web 网站服务器 或 API 接口服务器 。
express 的基本使用
express 的安装
在项目根目录下执行如下指令:
1 |
|
express 的基本使用
创建基本的 web 服务器
1 |
|
监听 GET / POST 请求
在通过 express 创建好基本的服务器后,我们可以用它来监听网络中的 GET / POST 请求,并做出相应的处理。
监听 GET 请求
本节我们先来学习如何监听 GET 请求。
通过 app.get()
方法,我们可以监听客户端的 GET 请求,具体的语法格式如下:
1 |
|
监听 POST 请求
监听 GET 请求类似,我们通过 app.post()
方法可以监听客户端的 POST 请求,具体语法格式如下:
1 |
|
将结果响应给客户端
在上面的代码中,我们看到两个方法的第二个入参都是一个回调函数,这个回调函数的第二个参数是一个响应对象(正如我们在 http 模块那一篇文章中提到的一样)。而我们可以通过调用 res.send()
方法,把处理好的内容发送给客户端:
1 |
|
我们通过 URL 向服务器发送一条 GET 请求,下面是服务器的返回结果:
创建上述一个 Web 服务器的完整代码如下:
1 |
|
获取 URL 中携带的查询参数
在上一节中,我们成功地使用 express 监听到了客户端发出的 GET 请求,本节我们将学习如何通过 express 获取 GET 请求中 URL 携带的查询参数。
通过 req.query
对象,可以访问到客户端通过查询字符串的形式发送到服务器的参数。
示例代码如下:
1 |
|
req.query
默认是一个空对象({}
)
获取 URL 中的动态参数
通过 req.params
对象,可以访问到 URL 中通过 :
匹配到的动态参数:
1 |
|
托管静态资源
express.static()
express 提供了一个非常好用的函数:express.static()
,通过这个函数,我们可以非常方便地创建一个静态资源服务器。
例如,通过如下代码,我们就可以将 public
目录下的图片、css、js 文件对外提供静态资源访问服务了:
1 |
|
假设存在这样一个目录结构:
1 |
|
我们将服务器代码写在了 node.js
文件中,运行该脚本文件,我们便能通过如下 URL 访问到 public
文件夹下的静态资源:
http://localhost/images/img.png
http://localhost/css/style.css
http://localhost/js/test.js
我们也可以用这个函数托管多个静态资源目录,但是访问静态资源文件时,express.static() 函数会根据目录的添加顺序查找所需的文件。举个例子:
1 |
|
通过这段代码我们同时添加了 public
文件夹和 assets
文件夹的静态文件资源托管。当我们请求静态资源文件时,会先去先添加的 public
文件夹中查找文件,如果没有查询到则会去 assets
文件夹中寻找。因此,当我们尝试访问 http://localhost/index.html
时,如果在 public
文件夹下和 assets
文件夹下都有 index.html
文件,最终返回给客户端的一定是 public/index.html
。
挂载路径前缀
如果我们希望在托管的静态资源访问路径前,挂载路径前缀,则可以使用如下的方式:
1 |
|
这样我们就可以通过 http://localhost/public/index.html
访问 public
文件夹下的 index.html
了。也可以避开上一小节讲的重名文件只能访问其中一个的限制。