You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
2 years ago
|
import Koa from 'koa';
|
||
|
import path from 'path';
|
||
|
import Router from 'koa-router';
|
||
|
import body from 'koa-body';
|
||
|
import cors from 'koa2-cors';
|
||
|
import koaStatic from 'koa-static';
|
||
|
import websockify from 'koa-websocket';
|
||
|
import route from 'koa-route';
|
||
|
|
||
|
import AppRoutes from './routes';
|
||
|
|
||
|
const PORT = 3300;
|
||
|
|
||
|
const app = websockify(new Koa());
|
||
|
|
||
|
app.ws.use(function (ctx, next) {
|
||
|
ctx.websocket.send('connection succeeded!');
|
||
|
return next(ctx);
|
||
|
});
|
||
|
|
||
|
app.ws.use(
|
||
|
route.all('/test', function (ctx) {
|
||
|
// ctx.websocket.send('Hello World');
|
||
|
ctx.websocket.on('message', function (message) {
|
||
|
// do something with the message from client
|
||
|
|
||
|
if (message !== 'ping') {
|
||
|
const data = JSON.stringify({
|
||
|
id: Math.ceil(Math.random() * 1000),
|
||
|
time: new Date().getTime(),
|
||
|
res: `${message}`,
|
||
|
});
|
||
|
ctx.websocket.send(data);
|
||
|
}
|
||
|
console.log(message);
|
||
|
});
|
||
|
}),
|
||
|
);
|
||
|
|
||
|
const router = new Router();
|
||
|
|
||
|
// router
|
||
|
AppRoutes.forEach((route) => router[route.method](route.path, route.action));
|
||
|
|
||
|
app.use(cors());
|
||
|
app.use(
|
||
|
body({
|
||
|
encoding: 'gzip',
|
||
|
multipart: true,
|
||
|
formidable: {
|
||
|
// uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录
|
||
|
keepExtensions: true,
|
||
|
maxFieldsSize: 20 * 1024 * 1024,
|
||
|
},
|
||
|
}),
|
||
|
);
|
||
|
app.use(router.routes());
|
||
|
app.use(router.allowedMethods());
|
||
|
app.use(koaStatic(path.join(__dirname)));
|
||
|
|
||
|
app.listen(PORT, () => {
|
||
|
console.log(`Application started successfully: http://localhost:${PORT}`);
|
||
|
});
|