我创建是koa2的项目,因为网上一搜全是koa2的资料,1的资料不好找,会增加学习的成本,降低学习的效率。创建命令:koa koa2-server。demo代码=》koa2-server项目代码
最原始的目录如下:(借的别人的图)
启动起来是这个的
然后添加了prettierrc、eslint等配置文件,形成最终的目录如下:
koa2-server
├─.editorconfig
├─.eslintrc.js
├─.prettierrc
├─app.js
├─mysql.js
├─package-lock.json
├─package.json
├─readme.md
├─treer.md
├─views
| ├─error.pug
| ├─index.pug
| └layout.pug
├─routes
| ├─index.js
| └users.js
├─public
| ├─stylesheets
| | └style.css
| ├─javascripts
| ├─images
├─bin
| └www
作为一个写代码有强迫症的人来说,当开始创建项目,规范的制定是一定要有的,所以我创建完项目就加上了prettierrc、eslint两个文件。
至于这两个文件的使用介绍可以看下:.eslintrc配置目录及配置项的使用;.prettierrc代码格式化配置介绍
项目创建好了,代码规范制定好了,接下来就是服务的初步开发了。
这方面如果不想做的,可以直接引koa2-response就行,具体的使用可以上npm上查看=》koa2-response,源代码=》koa2-response。很简单,没几个文件,所以我选择直接复制过来,就不用他了,毕竟这样后面改起来也方便。
在根目录下新建middleware/response文件夹,文件夹里创建index.js和response.js文件
index.js对外发布中间件方法的统一文件,同时也要满足app.use()里的内容需要是一个函数的要求
const { success, error } = require('./response');
module.exports = async (ctx, next) => {
ctx.success = success.bind(null, ctx);
ctx.error = error.bind(null, ctx);
await next();
};
response.js是返回实体的格式了,现在有成功失败两种
const response = {
code: 1,
data: [],
message: '操作成功'
};
/**
* response
* @param ctx
* @param data 数据
* @param code 错误码 || [错误码, 错误描述]
* @param message 错误描述
*/
exports.response = (ctx, data, code, message) => {
if (typeof code == 'object') {
message = code[1];
code = code[0];
}
ctx.body = {
code,
data,
message
};
};
/**
* response 成功
* @param ctx
* @param data 数据
* @param code 错误码 || [错误码, 错误描述]
* @param message 错误描述
*/
exports.success = (ctx, data, code = 1, message = '操作成功') => {
if (typeof code === 'string') {
message = code;
}
this.response(ctx, data, code, message);
};
/**
* response 异常
* @param ctx
* @param code 错误码 || [错误码, 错误描述]
* @param message 错误描述
*/
exports.error = (ctx, code = 0, message = '操作失败') => {
if (typeof code === 'object') {
message = code[1];
code = code[0];
}
this.response(ctx, response.data, code, message);
};
这样以后自己魔改也方便。
因为get请求创建项目里直接就有了,所以就不多说了。
接下来开发一个post接口,同时测试下返回体格式。post请求需要koa-bodyparser依赖的支持来获取请求参数,新建项目的时候默认都安装了,在app.js里可以看到。
routes/users.js
const mysql = require('../mysql');
const router = require('koa-router')();
const paramCheck = require('../tool/paramCheck');
router.prefix('/users');
const code = {
UNKNOWN_ERROR: [1, 'Sorry, you seem to have encountered some unknown errors.']
};
router.get('/', (ctx, next) => {
ctx.body = 'this is a users response!';
});
router.get('/bar', (ctx, next) => {
ctx.body = 'this is a users/bar response';
});
// router.post('/login', async (ctx, next) => {
// const requestParam = ['name', 'password'];
// const user = ctx.request.body;
// if (paramCheck.check(user, requestParam) !== true) {
// ctx.error([1, paramCheck.check(user, requestParam)]);
// } else {
// ctx.success({
// type: 1
// });
// }
// // mysql.query(
// // 'SELECT * FROM `koa2_server`.`user` LIMIT 0,1000',
// // (error, results, fields) => {
// // if (error) throw error;
// // // console.log('The solution is: ', results);
// // }
// // );
// console.log(ctx.request.body);
// });
router.post('/test', async (ctx, next) => {
const user = ctx.request.body;
ctx.success({
list: '成功'
});
console.log(ctx.request.body);
});
module.exports = router;
postman跑起来,获取到了请求参数,简单的post接口完成
上一篇:node从入门到放弃系列之(3)服务项目重构及跳车koa
下一篇:node从入门到放弃系列之(5)登录接口demo