mirror of https://github.com/msgbyte/tailchat
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.
67 lines
1.4 KiB
TypeScript
67 lines
1.4 KiB
TypeScript
import { buildRouter, Tushan } from 'tushan';
|
|
import { User } from './resources/User';
|
|
import Koa from 'koa';
|
|
import path from 'path';
|
|
import session from 'koa-session';
|
|
import dotenv from 'dotenv';
|
|
|
|
dotenv.config({ path: path.resolve(__dirname, '../../.env') });
|
|
|
|
const mongoUri = process.env.MONGO_URL;
|
|
const adminPass = process.env.ADMIN_PASS;
|
|
|
|
async function start() {
|
|
if (!mongoUri) {
|
|
console.warn(`MONGO_URL has not been set.`);
|
|
return;
|
|
}
|
|
|
|
if (!adminPass) {
|
|
console.warn(`ADMIN_PASS has not been set.`);
|
|
return;
|
|
}
|
|
|
|
const app = new Koa();
|
|
|
|
app.keys = ['tushan'];
|
|
app.use(session({ key: 'sess:tushan' }, app));
|
|
|
|
const tushan = new Tushan({
|
|
datasourceOptions: {
|
|
type: 'mongodb',
|
|
url: mongoUri,
|
|
} as any,
|
|
resources: [
|
|
{
|
|
entity: User,
|
|
options: {
|
|
label: '用户',
|
|
},
|
|
},
|
|
],
|
|
pages: [],
|
|
});
|
|
|
|
await tushan.initialize();
|
|
|
|
const router = await buildRouter({
|
|
tushan,
|
|
auth: {
|
|
local: async (username, password) => {
|
|
if (username === 'tailchat' && password === adminPass) {
|
|
return { username, title: 'Admin' };
|
|
}
|
|
|
|
throw new Error(`User not found: ${username}`);
|
|
},
|
|
},
|
|
});
|
|
app.use(router.routes()).use(router.allowedMethods());
|
|
|
|
app.listen(6789, () => {
|
|
console.log('服务器已启动:', `http://localhost:6789/admin/`);
|
|
});
|
|
}
|
|
|
|
start();
|