-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
130 lines (111 loc) · 3.91 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// which psql heroku pg:psql --app alikon //frozen-atoll-47887
const HPORT = 3000;
//const DB_URL='postgress://globik:null@localhost:5432/test';
const DB_URL=process.env.DATABASE_URL;
const Koa=require('koa');
const koaBody=require('koa-body');
const passport=require('koa-passport');
const WebSocket=require('ws');
const {websock}=require('./libs/websock.js');
const shortid=require('shortid');
const url=require('url');
const Pool=require('pg-pool');
const PgStore=require('./libs/pg-sess.js');
const pgtypes=require('pg').types;
const render=require('koa-rend');
const serve=require('koa-static');
const session=require('koa-generic-session');
const pubrouter=require('./routes/pubrouter.js');
const adminrouter=require('./routes/adminrouter.js');
const mainmenu=require('./config/app.json');
//const adminrouter=require('./routes/adminrouter.js');
//const pgn=require('pg').native.Client; // see test/pg.js for LD_LIBRARY_PATH
pgtypes.setTypeParser(1114, str=>str);
const pars=url.parse(DB_URL);
const cauth=pars.auth.split(':');
const pg_opts = { user:cauth[0],password:cauth[1],host:pars.hostname,port:pars.port,database:pars.pathname.split('/')[1],
ssl:false
//Client:pgn
};
const pool = new Pool(pg_opts);
const pg_store=new PgStore(pool);
pool.on('connect', function(client){console.log('db connected!')})
pool.on('error', function(err, client){console.log('db err: ', err.name)})
pool.on('acquire', function(client){console.log('db acquired!')})
const app=new Koa();
app.keys=['your-secret']
app.use(serve(__dirname+'/public'));
app.use(session({store: pg_store}, app))
render(app,{root:'views', development: true})
app.use(koaBody())
require('./config/auth.js')(pool,passport)
app.use(passport.initialize())
app.use(passport.session())
function xhr(){
return async function xhr(ctx,next){
ctx.state.xhr=(ctx.request.get('X-Requested-With')==='XMLHttpRequest')
await next()
}
}
app.use(xhr());
app.use(async (ctx, next)=>{
ctx.state.showmodule = mainmenu;//see config/app.json
await next();
})
app.use(pubrouter.routes()).use(pubrouter.allowedMethods());
app.use(adminrouter.routes()).use(adminrouter.allowedMethods());
app.use(async (ctx, next)=>{
console.log('ctx.status!',ctx.status);
//await next();
try{
await next();
if(ctx.status === 404) ctx.throw(404, "fuck not found",{user:"fuck userss"});
}catch(err){
//ctx.status=err.status || 500;
//console.log('THIS>STATUS: ', ctx.status);
console.log("error");
if(ctx.status=== 404){
ctx.session.error='not found';
console.log('method: ', ctx.method, 'ctx.url: ', ctx.url);
if(!ctx.state.xhr)ctx.body=await ctx.render("error",{});
return;
}
}});
app.on('error', function(err, ctx){
console.log('app.on.error: ',err.message, 'ctx.url : ', ctx.url);
});
pg_store.setup().then(function(){
const servak=app.listen(process.env.PORT||HPORT);
const wss=new WebSocket.Server({server:servak});
//websock(wss,pool,sse,shortid,server,RTCPeerConnection,RTCSessionDescription,peerCapabilities,roomOptions);
//websock(wss,pool, 'sse', shortid,' server', 'RTCPeerConnection ', 'RTCSessionDescription' , 'peerCapabilities,roomOptions');
function noop(){}
const interval=setInterval(function ping(){
wss.clients.forEach(function each(ws){
if(ws.isAlive===false)return ws.terminate();
ws.isAlive=false;
ws.ping(noop);
})
},50000)
function heartbeat(){this.isAlive=true;}
wss.on('connection', function(ws,url){
console.log("websocket connected.");
ws.isAlive=true;
ws.on('pong',heartbeat);
ws.on('message',function(msg){
console.log("websocke message: ",msg);
var send_to_client=0;
if(send_to_client==0)ws.send(msg);
});
ws.on('error', function(er){console.log("websock err: ", err);})
ws.on('close', function(){console.log("websocket closed");
//ws.removeListener(heartbeat);
});
});
console.log('soll on port: ', PORT, 'started.');
}).catch(function(err){
console.log("err setup pg_store", err.name);
});
process.on('unhundledRejection',(reason, p)=>{
console.log('Unhandled Rejection at: Promise', p, 'reason: ', reason);
});