1、安装nacos客户端
npm install nacos --save
2、在NodeJs中新增environment.ts文件,并新增environment变量解析config文件(开发环境从config.dev.json读取,生产环境从nacos读取,你也可以按照自己的项目实际情况调整)
/** * API 转发规则: * {localServices}设置了值之后,指定的服务会转发至本地启动的接口; * 开发环境将遵守以上规则,生产环境所有 api 均会转发至网关; */ import config from './config.json'; import devConfig from './config.dev.json'; import { NacosConfigClient } from 'nacos'; const isDevelopment = process.env.NODE_ENV === 'development'; export let environment: { [key: string]: any | any[] } = {}; export const configJson: { [key: string]: any | any[] } = { isDevelopment: isDevelopment, ...(isDevelopment ? devConfig : config), }; const configClient = new NacosConfigClient({ serverAddr: configJson.nacos.serverAddr, namespace: configJson.nacos.namespace, }); export async function nacos() { if (isDevelopment) { environment = devConfig; } else { await configClient.getConfig(configJson.nacos.dataid, configJson.nacos.group).then((data) => { environment = { isDevelopment: isDevelopment, ...JSON.parse(data) }; }); } }
3、app.ts启动项改为如下:
import Koa from 'koa'; import logger from 'koa-logger'; import serve from 'koa-static'; import session from 'koa-generic-session'; import redisStore from 'koa-redis'; import path from 'path'; import http from 'http'; import statuses from 'statuses'; import { gatewayAccessCheck } from './middlewares/gateway-access-check'; import { authStateCheck } from './middlewares/auth-state-check'; import { ssoCheck } from './middlewares/sso-check'; import { routes } from './routes'; import { environment, nacos } from './environment'; import { connect } from './sockets/websocket'; // 添加自定义登录超时状态码 statuses[440] = 'Login Timeout'; const app = new Koa(); nacos().then((data) => { app.keys = ['movitech production']; app.use( session({ key: 'admin.bpm.sid', store: redisStore({ host: environment.session.redis.host, //environment.session.redis.host, port: environment.session.redis.port, //environment.session.redis.port, db: environment.session.redis.db, //environment.session.redis.db, password: environment.session.redis.password, //environment.session.redis.password, }), cookie: { maxAge: environment.session.maxAge * 1000 }, }) ); app.use(logger()); // 先检查网关授权 app.use(gatewayAccessCheck()); // 用户状态验证后再进行 sso 验证 app.use(authStateCheck()); app.use(ssoCheck()); // 静态文件 app.use(serve(path.resolve(__dirname, '../public'))); // 路由 app.use(routes); const server = http.createServer(app.callback()); connect(server); server.listen(environment.port, () => { console.log(`[*] web app listening on :${environment.port}`); }); });
参考资料:http://errornoerror.com/question/11370030499873456177/
浙公网安备 33010602011771号