Express 是一个快速的 web 开发框架,相比 node 原先的 http 库开发简单很多,上手也很容易。
快速开始
使用 Express,可以很快的搭建一个服务器。
首先建立一个文件夹,对项目进行初始化。
bash
代码语言:javascript复制1mkdir express-demo
2npm init -f
3npm i express
4touch index.js
COPY
编辑 index.js
js
代码语言:javascript复制1const express = require("express");
2
3const app = express();
4
5app.get('/', (req, res) => {
6 res.send('hellp, express')
7})
8
9app.listen(3000, () => {
10 console.log('server listen on http://127.0.0.1:3000')
11})
COPY
这样一个简单的服务器做好了,用浏览器访问127.0.0.1:3000
将会看到 hello, express
托管静态路由
使用中间件 express.static()
可以快捷的托管某个文件夹内的网页。
js
代码语言:javascript复制1app.use('/', express.static('demo')) // 托管 demo 文件夹到网站根目录
COPY
如果路由冲突,则以第一个路由为准。
跨域
什么是同源,什么是跨域。
一般浏览器会禁止跨域的 ajax 请求,跨域指,与当前地址(...)不同的其他地址,端口,协议,域名。
一般的只要服务器发出的请求加上跨域请求头,允许跨域就行了。
在 node 中我们可以使用 cors。
安装 cors
bash
代码语言:javascript复制1npm i cors
COPY
在 js 中引入
js
代码语言:javascript复制1app.use(require('cors')())
COPY
连接 mongdb
使用 mongoose
连接和操作 mongodb。
bash
代码语言:javascript复制1npm i mongoose
COPY
在 js 中加入
js
代码语言:javascript复制1const mongoose = require("mongoose");
2mongoose.connect("mongodb://127.0.0.1:27017/express-test", {
3 useNewUrlParser: true
4}); // 使用新的地址解析器
5
6const Names = mongoose.model( // 定义一个新的模型
7 "Names", // 相当于 SQL 的表的名称
8 new mongoose.Schema({ // 相当于 SQL 的字段类型
9 name: String,
10 age: Number
11 })
12);
COPY
下面实现POST /names
时把数据录入 mongodb 中。
js
代码语言:javascript复制1app.use(express.json()) // 开启 express 的 json 数据处理
2
3app.post('/names', async (req, res) => {
4 const data = req.body;
5 res.send(await Names.create(data))
6})
COPY
操作数据库时必须使用 async 函数,操作时使用 await 阻塞代码运行。否则会出现一直等待的情况。
查询数据
定义一个路由 /names
,get 请求时返回所以记录的 json 格式。
js
代码语言:javascript复制1app.get("/names", async (req, res) => {
2 //res.send(await Names.find());
3 res.send(await Names.find().sort({ _id: 1 })); // 1 正序排序 -1 倒序
4});
COPY
定义一个子路由,子路径为参数对象的参数
js
代码语言:javascript复制1app.get("/names/:name", async (req, res) => {
2 const name = req.params.name;
3 res.send(await Names.findOne({ name }));
4});
COPY
修改数据
使用 put
请求修改数据库中的请求。
js
代码语言:javascript复制1app.put("/names/:name", async (req, res) => {
2 const params = req.params.name;
3 const name = await Names.findOne({ name: params }); // find 接受一个对象 键: 数据库中的字段 值: 需要查找的字段
4 name.name = req.body.name;
5 await name.save();
6 res.send(name);
7});
COPY
删除数据
js
代码语言:javascript复制1app.delete('/names/:name', async (req, res) => {
2 const name = await Names.findOne({name: req.params.name})
3 await name.remove()
4 res.send({
5 success: true
6 })
7})
COPY
REST Client 测试
http
代码语言:javascript复制1@url=http://127.0.0.1:8000/
2### get
3get http://127.0.0.1:8000/names
4### get
5get {{url}}names/abc
6
7### post name
8post {{url}}names
9Content-Type: application/json
10
11{
12 "name": "ab",
13 "age": 8
14}
15
16### put edit
17
18put {{url}}names/abc
19Content-Type: application/json
20
21{
22 "name": "qq"
23}
24
25### del
26
27DELETE {{url}}names/ab