写在前面:在实际开发中前后端通过api来实现数据交互,前端写页面,请求数据,根据请求到的数据进行处理. 后端实现各种功能并提供api接口
- 接收数据
- 验证数据
- 返回数据
express框架的使用
- 安装express
npm install express -save
*在引用第三方模块时 node会自动从当前目录的node_modules 依次向上寻找
const express = require("express");
var app = express()
// 创建一个api
app.get('/user/login', (req, res) => {
// 接受get参数 query
console.log(req.query);
console.log('login method run');
// 处理参数
res.send({
err: 0,
msg: 'login ok',
})
})
app.post('/user/regist', (req, res) => {
// 接受post数据
// express 无法解析消息体 可以借助 body-parser插件 npm install body-parser
let { username, pwd } = req.body;//无法使用
console.log(req.body)
if (username == 111 && pwd == 111) {
res.send({ msg: 'reg ok' })
}
})
app.listen(3000, () => {
console.log('start');
})
// http://localhost:3000/user/login
/*
api 接口的组成:
IP
port
path
method: get / post
用户的数据
另:数据格式由后端来确定
*/
- express无法解析消息体需要通过第三方插件来完成 如 : body-parser
npm install body-parser
- 使用时 require(‘body-parser’)即可
- 另外可以用postman 来使用发post请求方法 postman下载(我这下载死慢死慢,今儿就不演示了…)
- 打开后 x-www-form-urlencode 即可发送表单格式的数据
- 实际开发 一般 json 表单 fromdata 基本就是这仨了
const express = require("express");
const bodyparser = require("body-parser")
var app = express()
// 解析 表单数据 x-www-form-urlencode
app.use(bodyparser.urlencoded({
extended: false
}))
// 也可解析 jason
app.use(bodyparser.json());
// 创建一个api
app.get('/user/login', (req, res) => {
// 接受get参数 query
console.log(req.query);
console.log('login method run');
// 处理参数
res.send({
err: 0,
msg: 'login ok',
})
})
app.post('/user/regist', (req, res) => {
// 接受post数据
// express 无法解析消息体 可以借助 body-parser插件 npm install body-parser
let { username, pwd } = req.body;//无法使用
console.log(req.body)
if (username == 123 && pwd == 456) {
res.send({ msg: 'reg ok' })
}
})
app.listen(3000, () => {
console.log('start');
})
// http://localhost:3000/user/login
/*
api 接口的组成:
IP
port
path
method: get post
用户的数据 btw 数据格式 由后端确定
*/
中间件 (拦截器
- 内置中间件 static
- 自定义中间件 (全局/局部)
- 第三方中间件(body-parser)
全局中间件demo:
const express = require("express");
var app = express();
app.use('/', (req, res, next) => {
console.log('拦截器生效');
let token = req.query;
if (token) {
next();
} else {
res.send('miss token');
}
})
// 创建一个api
app.get('/test1', (req, res) => {
// 接受get参数 query
console.log(req.query);
console.log('login method run');
// 处理参数
res.send({
err: 0,
msg: 'login ok',
})
})
app.get('/test2', (req, res) => {
// 接受post数据
let { username, pwd } = req.body;// 不可直接使用
res.send({
msg: 'reg ok'
})
})
app.listen(3000, () => {
console.log('start');
})
// http://localhost:3000/user/login
/*
api 接口的组成:
IP
port
path
method: get post
用户的数据 btw 数据格式 由后端确定
*/
- 请求时 先匹配上就先执行谁 所以 ‘/’ 在每次请求时都会被匹配 在实际中 在此可以检查token然后决定要不要继续往下匹配 执不执行next();
局部中间件demo:
const express = require("express");
var app = express();
app.get('/test1', (req, res, next) => {
console.log('fun1');
next();//继续往下执行 fun2
}, (req, res) => {
console.log('fun2');
res.send('fun2 exposed')
})
app.listen(3000, () => {
console.log('start');
})
- template : app.get(path, fun1(),fun2(),…)