业务1
业务2
业务3
证券交易所
柜台
中间件
业务-后台
用户-浏览器
证券交易所
柜台
中间件
行情
基金
express | koa | |
---|---|---|
Github Stars | 34k+ | 17k+ |
Contributions | 217 | 136 |
Middlewares | 3128 | 1038 |
优点 | 最流行、最出名、生态成熟 | 依赖模块少,优雅的异步处理和错误处理 |
缺点 | 异步处理和错误处理 | 生态相比不够成熟 |
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
console.log(1);
await next();
console.log(2);
});
app.use(async (ctx, next) => {
console.log(3);
await next();
console.log(4);
});
app.listen(3000);
const logger = require('../lib/logger').getLogger();
module.exports = async function(ctx, next) {
let start = +new Date;
try {
await next();
} catch (error) {
error = error || new Error('unknow error');
if (error.expected) return;
logger.ctx(ctx).fatal(`error: ${error.message}, stack: ${error.stack}`);
ctx.set('cache-control', 'no-cache, max-age=0');
ctx.status = error.status || 500;
ctx.type = 'json';
ctx.body = {
code: error.code,
error: error.error,
message: error.message,
};
} finally {
let time_cost = +new Date - start;
// todo report
}
};
process.on('unhandledRejection', (err) => {
logger.fatal(`unhandledRejection: ${err.message}, stack: ${err.stack}`);
});
process.on('uncaughtException', (err) => {
logger.fatal(`uncaughtException: ${err.message}, stack: ${err.stack}`);
});
require('request-debug')(rp, function(type, data, r) {
if(type === 'request') {
let {debugId, uri, method, body} = data;
let userId = data.headers.userId;
let more = body ? '' : ('-' + body) + userId ? '' : ('userId:' + userId);
debug(`${debugId}-${method}-${uri}-${more}`.replace(/\s+/g, ' '));
}
if(type === 'response') {
let {debugId, statusCode, body} = data;
debug(`${debugId}-resp-${statusCode}-${JSON.stringify(body)}`.replace(/\s+/g, ' '));
}
});
supertest & ava
贵在坚持
pm2 | docker | |
---|---|---|
优点 | 简单、方便、适用于小项目 | 环境稳定、版本控制好、方便跨集群部署、结合 CI 可自动化部署 |
缺点 | 不方便回滚、不方便跨集群部署 | 需要与之配套的发布工具及环境 |
建议 | 个人项目、小项目使用 | 公司有条件支持时使用 |
# base image
FROM node:slim
# image name
ENV IMAGE_NAME example
# work dir
RUN mkdir -p /www/$IMAGE_NAME
ADD . /www/$IMAGE_NAME
WORKDIR /www/$IMAGE_NAME
# install node_modules
RUN npm install --production --verbose
# env
ENV PORT=8000
# start
CMD ["./start.sh"]
Gitlab CI
Gateway-Nginx
用户-浏览器
后台-Gateway
后台服务
docker
前端资源
html/css