导航

NodeJs Nacos配置

Posted on 2021-04-19 15:17  杨彬Allen  阅读(5758)  评论(0)    收藏  举报

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/