零星经验
复杂功能简单化
(仅针对自己)在复杂的功能中,很多时候一个函数或者一条SQL
虽然可以完成任务,但是需要考虑的情况很多且不利于扩展,这个时候不要想着非得将所有功能塞在一起,比如:
SQL
插入去重:先SELECT
记录是否存在,没有再插入- 项目管理:先添加项目,再给项目添加负责人或成员
Koa2 中利用JSDoc 实现代码类型提示
koa2 中的事件处理函数接收ctx, next
参数,但是在自定义函数在VSCode 中没有参数类型提示
// 这样写没有类型提示
async function editTeam(ctx, next) {
let body = ctx.request.body
ctx.body = Msg.success(team)
}
于是可以封装一个新的函数,并通过JSDoc 注释来让VSCode 能够解析参数类型:
const { Context } = require('koa');
/**
* Wrap controller with try catch
*
* @param {function(Context): Promise<object>} func
* @returns
*/
function defineController(func) {
/**
* @param {Context} ctx
*/
return async (ctx) => {
try {
ctx.body = await func(ctx)
} catch (e) {
ctx.body = Msg.internalError(e)
log(ctx, `internal error: ${JSON.stringify(ctx.body)}`)
}
}
}
// 使用方法
const defaultController = defineController(async (ctx) => {
// 这里编译器便可以自动提示ctx 中定义的属性
return "hello world!"
});
module.exports = { defaultController, defineController};