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

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