-
新建node项目文件夹,并在内创建src文件夹,用于存放接口文件
-
在src文件夹下创建app.js,并输入以下内容:
const express = require('express')
const app = express()
// 跨域处理
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1')
if(req.method=="OPTIONS") res.send('200');/*让options请求快速返回*/
else next();
});
app.listen(3000, () => {
console.log('服务器开启127.0.0.1:3000')
})
app.js文件就是主路由所在,代码中可以看出,接口的方法有以下几种
PUT:一般用于更新
POST:body传参
GET:query传参
DELETE:删除
OPTIONS:预检,跨域时一般会先发送这类请求,然后再请求其他类型的接口
其中,为了解决body传参需要引入一个组件body-parser
解决
安装body-parser:npm install --save body-parser
配置body-parser,在app.js中:
const express = require('express')
const bodyParser = require('body-parser') // 引入body-parser
const app = express()
// 跨域处理
//...
// 处理body传参
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// ...
这个时候我们就可以在app.js中写我们的接口了,如:
...
const models = require('../../models') // 模型对象
const outputFormat = require('./outputFormat') // 统一出口
app.post('/login', async (req, res) => {
let { account,password } = req.body; // 因为是post请求,所以参数默认都在body里面,当然也可以指定在query里面
if (account === '' || password === '') { // 不能为空,一般前端会处理此项,后端也判断,双层保险
outputFormat(res,'', '账号或密码不能为空!', 101) // outputFormat函数是我自己写的一个统一的返回函数,为了保证格式的一致性,下面补出outputFormat文件内容,应该有更好的方法。
return
}
let data = await models.manager.findOne({ // 这里使用的是Sequelize模型来查询数据库,
where: {
account,
password
},
})
if (data) {// 登录成功
// ...缓存啊,token啊啥的
outputFormat(res,token)
} else {
outputFormat(res,'', '账号或密码错误!', 101)
}
})
outputFormat.js代码
/**
* 输出的数据格式化
* {
* code:提示代码
* data:数据
* msg:提示信息
* }
* code:
* 0:成功,
* 1:失败,无任何前端提示,
* 101:失败,前端需toast提示,
* 202:失败,前端需console控制台打印,
* 10086:登录失效,提示重新登录
*/
module.exports = (res,data,msg = 'success',code = 0) => {
res.json({
code,
data,
msg
})
}
在前端页面调用接口:(本地)http://127.0.0.1:3000/login
以上便能创建接口并且使用接口,但是在日常开发中,不可能将所有的接口都写在app.js里面,此时我们就需要将接口代码分开,根据每个模块建立一个接口js文件:
如新建loginAbout.js文件,处理用户的登录,注册,退出登录等
// loginAbout.js
const express = require('express')
const router = express.Router() // 创建子路由router
...
// 登录
router.post('/login', async (req, res) => {
let { account,password } = req.body;
...
})
module.exports = router
然后在主路由app.js中注册子路由
// app.js
// 子路由
const login = require('./loginAbout')
app.use(login)
// 此时页面上请求的接口路径为:http://127.0.0.1:3000/login
我们还可以在注册子路由的时候添加其他的信息:
// app.js
// 子路由
const login = require('./loginAbout')
app.use('/user',login)
// 此时页面上请求的接口路径就变为:http://127.0.0.1:3000/user/login
本地开发调试的时候需要启动nodejs,需安装nodemon
npm install --save-d nodemon
启动:nodemon src/app.js
也可以配置成vue类似的启动命令,首先在package.json
中的scripts添加以下代码
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon src/app.js" // 添加此行
},
然后使用命令:npm run dev
启动nodejs
完。