数据库
数据库即存储数据的仓库
如何操作:
- Node.js可以通过数据库提供的API去操作数据库
- compass通过界面操作数据库
术语:数据库,集合,文档,字段
Express框架是什么
Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用。我们可以使用 npm install express 命令进行下载。
Express框架特性
-
提供了方便简洁的路由定义方式
-
对获取HTTP请求参数进行了简化
-
处理对模板引擎支持程度高,方便渲染动态HTML页面
-
提供了中间件机制有效控制HTTP请求
-
拥有大量第三方中间件对功能进行扩展
//使用Express框架创建web服务器及其简单,调用express模块返回的函数即可。
// 引入Express框架
const express = require('express');
// 使用框架创建web服务器
const app = express();
// 当客户端以get方式访问/路由时
app.get('/', (req, res) => {
// 对客户端做出响应 send方法会根据内容的类型自动设置请求头
res.send('Hello Express');
// <h2>Hello Express</h2> {say: 'hello'}
});
// 程序监听3000端口
app.listen(3000);
中间件
-
中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。
-
中间件主要由两部分构成,中间件方法以及请求处理函数。
-
可以针对同一个请求设置多个中间件,对同一个请求进行多次处理。
-
默认情况下,请求从上到下依次匹配中间件,一旦匹配成功,终止匹配。
-
可以调用next方法将请求的控制权交给下一个中间件,直到遇到结束请求的中间件。
app.get('/request', (req, res, next) => {
req.name = "张三";
next();
});
app.get('/request', (req, res) => {
res.send(req.name);
});
中间件应用
-
路由保护,客户端在访问需要登录的页面时,可以先使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登录的页面。
-
网站维护公告,在所有路由的最上面定义接收所有请求的中间件,直接为客户端做出响应,网站正在维护中。
-
自定义404页面
请求方式
-
app.get(‘请求路径’, ‘处理函数’) // 接收并处理get请求
-
app.post(‘请求路径’, ‘处理函数’) // 接收并处理post请求
-
app.use 匹配所有的请求方式,可以直接传入请求处理函数,代表接收所有的请求。
错误处理中间件
app.use((err, req, res, next) => {
res.status(500).send('服务器发生未知错误');
})
Express请求处理
- GET参数的获取
Express框架中使用req.query即可获取GET参数,框架内部会将GET参数转换为对象并返回。
// 接收地址栏中问号后面的参数
// 例如: http://localhost:3000/?name=zhangsan&age=30
app.get('/', (req, res) => {
console.log(req.query); // {"name": "zhangsan", "age": "30"}
});
- POST参数的获取
Express中接收post请求参数需要借助第三方包 body-parser。
// 引入body-parser模块
const bodyParser = require('body-parser');
// 配置body-parser模块
app.use(bodyParser.urlencoded({ extended: false }));
// 接收请求
app.post('/add', (req, res) => {
// 接收请求参数
console.log(req.body);
})
Express路由参数
app.get('/find/:id', (req, res) => {
console.log(req.params); // {id: 123}
});
express-art-template模板引擎
app.locals 对象
将变量设置到app.locals对象下面,这个数据在所有的模板中都可以获取到。
app.locals.users = [{
name: '张三',
age: 20
},{
name: '李四',
age: 20
}]