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