在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:hai-27/koa2-start-basic开源软件地址:https://github.com/hai-27/koa2-start-basic开源编程语言:JavaScript 100.0%开源软件介绍:koa2-start-basic前言使用Koa2实现了一个node.js后端服务器快速启动模板(即具备后端服务器的基本功能),使用了路由、数据库连接、请求体处理、异常处理、静态资源请求处理、session、登录拦截器等中间件,基本实现了一个node.js后端服务器的基本功能。并设计实现了用户模块的登录、注册、查找用户名接口。 之前基于Node.js(Koa) 实现了vue-store项目后端store-server。昨晚我突然想到,可以从那个后端服务器把关键部分抽离出来实现一个后端服务器快速启动模板,需要使用的时候只需要分模块的添加一些接口并实现,就可以快速的构建起来一个后端服务器。 运行项目
快速创建一个服务器安装koa
基本配置const Koa = require('koa');
let { Port } = require('./config');
let app = new Koa();
// response
app.use(ctx => {
ctx.body = 'Hello Koa';
});
// 监听服务器启动端口
app.listen(Port, () => {
console.log(`服务器启动在${ Port }端口`);
}); 测试就这样一个node.js服务器就启动起来了, 使用postman测试一下 路由中间件思路:
路由中间件目录└── src # 源代码目录
└── routers # 路由目录
└── router # 子路由目录
├── usersRouter.js # 用户模块子路由
├── ... # 更多的模块子路由
├── index.js # 路由入口文件 安装koa-router
模块子路由设计const Router = require('koa-router');
// 导入控制层
const usersController = require('../../controllers/usersController');
let usersRouter = new Router();
usersRouter
.post('/users/login', usersController.Login)
module.exports = usersRouter; 模块子路由汇总const Router = require('koa-router');
let Routers = new Router();
const usersRouter = require('./router/usersRouter');
Routers.use(usersRouter.routes());
module.exports = Routers; 使用路由中间件// 使用路由中间件
const Routers = require('./routers');
app.use(Routers.routes()).use(Routers.allowedMethods()); 接口测试使用postman测试接口 数据库连接封装思路:
安装mysql依赖包
配置连接选项在config.js添加如下代码,然后在db.js引入 // 数据库连接设置
dbConfig: {
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: '',
database: 'storeDB'
} 连接池封装创建"./src/models/db.js" var mysql = require('mysql');
const { dbConfig } = require('../config.js');
var pool = mysql.createPool(dbConfig);
var db = {};
db.query = function (sql, params) {
return new Promise((resolve, reject) => {
// 取出连接
pool.getConnection(function (err, connection) {
if (err) {
reject(err);
return;
}
connection.query(sql, params, function (error, results, fields) {
console.log(`${ sql }=>${ params }`);
// 释放连接
connection.release();
if (error) {
reject(error);
return;
}
resolve(results);
});
});
});
}
// 导出对象
module.exports = db; 更多的信息请参考mysql文档。 请求体数据处理思路:
let { userName, password } = ctx.request.body; 安装koa-body中间件
使用koa-body中间件在config.js配置上传文件路径 uploadDir: path.join(__dirname, path.resolve('../public/')), // 上传文件路径 在app.js使用koa-body中间件 const KoaBody = require('koa-body');
let { uploadDir } = require('./config'); // 处理请求体数据
app.use(KoaBody({
multipart: true,
// parsedMethods默认是['POST', 'PUT', 'PATCH']
parsedMethods: ['POST', 'PUT', 'PATCH', 'GET', 'HEAD', 'DELETE'],
formidable: {
uploadDir: uploadDir, // 设置文件上传目录
keepExtensions: true, // 保持文件的后缀
maxFieldsSize: 2 * 1024 * 1024, // 文件上传大小限制
onFileBegin: (name, file) => { // 文件上传前的设置
// console.log(`name: ${name}`);
// console.log(file);
}
}
})); 异常处理思路:
在app.js添加如下代码 // 异常处理中间件
app.use(async (ctx, next) => {
try {
await next();
} catch (error) {
console.log(error);
ctx.body = {
code: '500',
msg: '服务器未知错误'
}
}
}); 静态资源服务器思路:
安装koa-static中间件
使用koa-static中间件在config.js配置静态资源路径 staticDir: path.resolve('../public'), // 静态资源路径 在app.js使用koa-static中间件 const KoaStatic = require('koa-static');
let { staticDir } = require('./config'); // 为静态资源请求重写url
app.use(async (ctx, next) => {
if (ctx.url.startsWith('/public')) {
ctx.url = ctx.url.replace('/public', '');
}
await next();
});
// 使用koa-static处理静态资源
app.use(KoaStatic(staticDir)); 接口测试使用浏览器测试接口 session实现思路:
安装koa-session中间件
使用koa-session中间件创建"./src/middleware/session.js" let store = {
storage: {},
set (key, session) {
this.storage[key] = session;
},
get (key) {
return this.storage[key];
},
destroy (key) {
delete this.storage[key];
}
}
let CONFIG = {
key: 'koa:session',
maxAge: 86400000,
autoCommit: true, // 自动提交标头(默认为true)
overwrite: true, // 是否可以覆盖(默认为true
httpOnly: true, // httpOnly与否(默认为true)
signed: true, // 是否签名(默认为true)
rolling: false, // 强制在每个响应上设置会话标识符cookie。到期重置为原始的maxAge,重置到期倒数
renew: false, // 在会话即将到期时更新会话,因此我们始终可以使用户保持登录状态。(默认为false)
sameSite: null, // 会话cookie sameSite选项
store // session池
}
module.exports = CONFIG; 在app.js使用koa-session中间件 const Session = require('koa-session');
// session
const CONFIG = require('./middleware/session');
app.keys = ['session app keys'];
app.use(Session(CONFIG, app)); 登录拦截器思路:
在"./src/middleware/isLogin.js",创建一个验证是否登录的函数 module.exports = async (ctx, next) => {
if (ctx.url.startsWith('/user/')) {
if (!ctx.session.user) {
ctx.body = {
code: '401',
msg: '用户没有登录,请登录后再操作'
}
return;
}
}
await next();
}; 在app.js使用登录拦截器 // 判断是否登录
const isLogin = require('./middleware/isLogin');
app.use(isLogin); 分层设计思路:
目录结构全部评论
专题导读
上一篇:xiadd/miniweather: 基于koa的微信公众号开发发布时间:2022-07-09下一篇:bilibili-live/mongodb-koa: koa-mongo 教程发布时间:2022-07-09热门推荐
热门话题
阅读排行榜
|
请发表评论