Express 是一个快速的 web 开发框架,相比 node 原先的 http 库开发简单很多,上手也很容易。

快速开始

使用 Express,可以很快的搭建一个服务器。
首先建立一个文件夹,对项目进行初始化。
1mkdir express-demo
2npm init -f
3npm i express
4touch index.js
Copy
编辑 index.js
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() 可以快捷的托管某个文件夹内的网页。
1app.use('/', express.static('demo')) // 托管 demo 文件夹到网站根目录
Copy
如果路由冲突,则以第一个路由为准。

跨域

什么是同源,什么是跨域。
一般浏览器会禁止跨域的 ajax 请求,跨域指,与当前地址(...)不同的其他地址,端口,协议,域名。
一般的只要服务器发出的请求加上跨域请求头,允许跨域就行了。
在 node 中我们可以使用 cors。
安装 cors
1npm i cors
Copy
在 js 中引入
1app.use(require('cors')())
Copy

连接 mongdb

使用 mongoose 连接和操作 mongodb。
1npm i mongoose
Copy
在 js 中加入
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 中。
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 格式。
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
定义一个子路由,子路径为参数对象的参数
1app.get("/names/:name", async (req, res) => {
2  const name = req.params.name;
3  res.send(await Names.findOne({ name }));
4});
Copy

修改数据

使用 put 请求修改数据库中的请求。
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

删除数据

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 测试

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
Copy

亲亲留个评论再走呗

正在加载评论区...