1 Star 0 Fork 0

zhangzz0213/Wl-Backend-Koa

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
app.js 2.85 KB
一键复制 编辑 原始数据 按行查看 历史
zhangzz0213 提交于 2024-07-08 16:39 . 1
import Koa from 'koa';
import json from 'koa-json';
import koaerror from 'koa-json-error';
import bodyparser from 'koa-bodyparser';
import logger from 'koa-logger';
import staticServe from 'koa-static';
import path from 'path';
import { fileURLToPath } from 'url';
import cors from '@koa/cors';
import KoaJwt from 'koa-jwt';
import system from './routes/system.js';
import support from './routes/support.js';
//调度任务
import { initSchduleTasks } from './controller/schedule/initSchduleTasks.js';
const app = new Koa();
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// 中间件
app.use(cors());
app.use(bodyparser({ enableTypes: ['json', 'form', 'text'] }));
app.use(json());
app.use(logger());
app.use(staticServe(__dirname + '/public'));
initSchduleTasks();
// 记录处理时间
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
console.log('🕔🕔🕔🕔 方法: ', `${ctx.method} ;'🕔 路由: ' ${ctx.url} ;'🕔 耗时: ' ${ms}毫秒`);
});
// JWT鉴权路由控制
if (!process.env.NODE_SECRET_KEY) {
console.error('JWT_SECRET_KEY is not set in the environment.');
process.exit(1); // 未设置密钥时,强制退出
}
const excludedPaths = ['/system/login', /^\/image/];
const jwtAuth = KoaJwt({
secret: process.env.NODE_SECRET_KEY
}).unless({
path: excludedPaths
});
// 错误处理中间件,用于捕获KoaJwt抛出的错误
const handleAuthError = async (ctx, next) => {
try {
await next();
} catch (err) {
if (err.status === 401) {
// 401 Unauthorized for JWT errors
ctx.status = 401;
ctx.body = {
error: 'Unauthorized',
message: err.message
};
} else {
throw err; // 如果是其他类型的错误,继续抛出
}
}
};
app.use(handleAuthError); // 全局错误处理中间件
app.use(jwtAuth); // 全局应用鉴权中间件,但排除特定路径
// Routes
app.use(system.routes(), system.allowedMethods());
app.use(support.routes(), support.allowedMethods());
//中间件错误监控
app.use(
koaerror({
format: (err, ctx) => {
const status = err.status || 500;
const isDevelopment = process.env.NODE_ENV === '开发环境';
return {
code: status,
message: err.message,
error: isDevelopment ? err.expose || err.message : '服务器异常!',
path: ctx.path,
result: isDevelopment ? err.stack : undefined
};
}
})
);
// 监听非中间件异常
app.on('error', (err, ctx) => {
console.error('服务器异常!!', err, ctx);
});
console.log(`🔰🔰 你好,${process.env.NODE_HOST} !`);
app.listen(process.env.NODE_PORT, () => {
console.log(`🚀🚀 访问环境: ${process.env.NODE_ENV}`);
console.log(`📦️📦️ 访问地址: ${process.env.NODE_HOST}:${process.env.NODE_PORT}`);
});
export default app;
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhangzz0213/wl-backend-koa.git
git@gitee.com:zhangzz0213/wl-backend-koa.git
zhangzz0213
wl-backend-koa
Wl-Backend-Koa
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385