floveluy / burnjs Goto Github PK
View Code? Open in Web Editor NEWA framework base on koa with typescript
A framework base on koa with typescript
this.ctx.body = `hi, egg , this is ${service.home.addnumber(3, 5)}`;
如果按照文章中这样输出 addnumber 方法的结果会是:
hi, egg , this is [object Promise]
这里应该修改为:
this.ctx.body = `hi, egg , this is ${ await service.home.addnumber(3, 5) }`
这样的结果才会是:
hi, egg , this is 8
最近正好在看typescript与egg合并开发的相关内容,这个教程对初学者还是很有帮助的。
现在放在一个仓库里,有点混乱。建议还是独立出来比较好。
比如我先简单搞了一个:
https://github.com/ipfans/egg-typescript
https://ipfans.gitbooks.io/egg-typescript/
启动服务一定要配置数据库,启动时能不能不配置sequelize
我们想要在controller中使用this.ctx.service.check.index();这样的形式,那我们必须要对ctx.service的getter进行重写。
我们在controller中可能会多次使用到this.ctx.service对象,所以我们必须要对其进行缓存,不然每次使用,我们都遍历service文件夹,导入模块,重新生成所有service对象,再挂载,我们的性能会急剧下降。
如果直接在外部初始化,是不是就不需要缓存了?这两种写法有什么 优劣吗?(loadConfig 好像也是类似这么实现的)
loadService() {
const services = fs.readdirSync(__dirname + '/service');
const loaded = {};
services.forEach(serivce => {
const name = serivce.split('.')[0];
const mod = require(__dirname + '/service/' + services);
loaded[name] = new mod(this);
})
Object.defineProperty(this.app.context, 'service', {
get() {
return loaded
}
})
}
在nodejs中,cluster子进程因为某种原因disconnect之后,会处理完所有的数据之后,自动被master重启。
import { Burn } from './core';
import * as cluster from 'cluster';
import * as os from 'os';
import { EventEmitter } from 'events';
export default class BurnCluster extends EventEmitter {
constructor() {
super();
}
forkWorkers() {
const numCPUs = os.cpus().length;
if (cluster.isMaster) {
// Fork workers.
console.log(`master进程#${process.pid}`)
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('fork', function (worker) {
console.log('worker ' + worker.process.pid + ' start');
worker.on('message', (msg) => {
console.log(msg + 'from ' + worker.process.pid)
})
})
cluster.on('online', function (worker) {
worker.disconnect();
})
cluster.on('exit', function (worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
// cluster.fork();
});
cluster.on('disconnect', function (worker) {
if (worker.isDead) {
console.log('工作进程 #' + worker.id + ' 已经死亡');
}
console.log('工作进程 #' + worker.id + ' 断开了连接');
})
cluster.on('listening', (worker, address) => {
});
} else {
const app = new Burn;
app.run();
// process.on('message', function (msg) {
// console.log('3:', msg);
// });
// (<any>process).send('你好');
}
}
startCluster() {
this.forkWorkers();
}
}
worker进程的master被杀死之后,worker都会立即自杀。
在cluster master中,childprocess收到disconnect后,不会自动被集群重启。
需要认为的手动退出和重启。
在master死后,childprocess也不会自动杀死自己,而是变成孤儿进程。
你好:
import { Controller } from "./base";
//user.ts
export default class User extends Controller {
async user() {
this.ctx.body = this.ctx.service.check.index(); // 这里仅仅爆 service 找不到,并不影响运行。
}
async userInfo() {
this.ctx.body = 'hello userinfo';
}
}
我在 base.ts 临时加了 any,也没有找到好的方法
import { BaseContext } from "koa";
interface SelfBaseContext extends BaseContext { //继承接口 BaseContext
service: any
}
export class Controller {
ctx: SelfBaseContext;
constructor(ctx: SelfBaseContext) {
this.ctx = ctx;
}
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.