feat: 增加broker并增加相关接口

pull/70/head
moonrailgun 2 years ago
parent 2c1aa02428
commit 7cdb5220c5

@ -926,6 +926,7 @@ importers:
react-admin: ^4.6.3 react-admin: ^4.6.3
react-dom: ^18.2.0 react-dom: ^18.2.0
react-router-dom: ^6.5.0 react-router-dom: ^6.5.0
tailchat-server-sdk: workspace:^0.0.14
ts-node: ^10.9.1 ts-node: ^10.9.1
typescript: ^4.8.4 typescript: ^4.8.4
dependencies: dependencies:
@ -951,6 +952,7 @@ importers:
react-admin: 4.6.3_ib3m5ricvtkl2cll7qpr2f6lvq react-admin: 4.6.3_ib3m5ricvtkl2cll7qpr2f6lvq
react-dom: 18.2.0_react@18.2.0 react-dom: 18.2.0_react@18.2.0
react-router-dom: 6.5.0_biqbaboplfbrettd7655fr4n2y react-router-dom: 6.5.0_biqbaboplfbrettd7655fr4n2y
tailchat-server-sdk: link:../packages/sdk
ts-node: 10.9.1_typescript@4.9.4 ts-node: 10.9.1_typescript@4.9.4
devDependencies: devDependencies:
'@remix-run/dev': 1.9.0_biqbaboplfbrettd7655fr4n2y '@remix-run/dev': 1.9.0_biqbaboplfbrettd7655fr4n2y

@ -56,7 +56,7 @@ const CardWithIcon = (props: Props) => {
<Box textAlign="right"> <Box textAlign="right">
<Typography color="textSecondary">{title}</Typography> <Typography color="textSecondary">{title}</Typography>
<Typography variant="h5" component="h2"> <Typography variant="h5" component="h2">
{subtitle || <LoadingIndicator />} {subtitle ?? <LoadingIndicator />}
</Typography> </Typography>
</Box> </Box>
</Box> </Box>

@ -3,7 +3,6 @@ import {
Datagrid, Datagrid,
DateField, DateField,
List, List,
NumberField,
ReferenceField, ReferenceField,
TextField, TextField,
UrlField, UrlField,

@ -0,0 +1,14 @@
import { TcBroker } from 'tailchat-server-sdk';
import brokerConfig from '../../../moleculer.config';
const transporter = process.env.TRANSPORTER;
export const broker = new TcBroker({
...brokerConfig,
metrics: false,
logger: false,
transporter,
});
broker.start().then(() => {
console.log('已链接上Tailchat网络, TRANSPORTER: ', transporter);
});

@ -5,7 +5,7 @@ import morgan from 'morgan';
import { createRequestHandler } from '@remix-run/express'; import { createRequestHandler } from '@remix-run/express';
import mongoose from 'mongoose'; import mongoose from 'mongoose';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { router } from './api'; import { apiRouter } from './router/api';
// 链接数据库 // 链接数据库
mongoose.connect(process.env.MONGO_URL!, (error: any) => { mongoose.connect(process.env.MONGO_URL!, (error: any) => {
@ -37,7 +37,7 @@ app.use(express.static('public', { maxAge: '1h' }));
app.use(morgan('tiny')); app.use(morgan('tiny'));
app.use('/admin/api', router); app.use('/admin/api', apiRouter);
app.all( app.all(
'/admin/*', '/admin/*',
@ -56,7 +56,7 @@ app.all(
}) })
); );
const port = process.env.PORT || 3000; const port = process.env.ADMIN_PORT || 3000;
app.listen(port, () => { app.listen(port, () => {
console.log( console.log(

@ -1,7 +1,8 @@
import { Router } from 'express'; import { Router } from 'express';
import raExpressMongoose from 'express-mongoose-ra-json-server'; import raExpressMongoose from 'express-mongoose-ra-json-server';
import jwt from 'jsonwebtoken'; import jwt from 'jsonwebtoken';
import { adminAuth, auth, authSecret } from './middleware'; import { adminAuth, auth, authSecret } from '../middleware';
import { networkRouter } from './network';
const router = Router(); const router = Router();
@ -20,7 +21,10 @@ router.post('/login', (req, res) => {
username, username,
platform: 'admin', platform: 'admin',
}, },
authSecret authSecret,
{
expiresIn: '2h',
}
); );
res.json({ res.json({
@ -32,17 +36,19 @@ router.post('/login', (req, res) => {
} }
}); });
router.use('/network', networkRouter);
router.use( router.use(
'/users', '/users',
auth(), auth(),
raExpressMongoose(require('../../../models/user/user').default, { raExpressMongoose(require('../../../../models/user/user').default, {
q: ['nickname', 'email'], q: ['nickname', 'email'],
}) })
); );
router.use( router.use(
'/messages', '/messages',
auth(), auth(),
raExpressMongoose(require('../../../models/chat/message').default, { raExpressMongoose(require('../../../../models/chat/message').default, {
q: ['content'], q: ['content'],
allowedRegexFields: ['content'], allowedRegexFields: ['content'],
}) })
@ -50,16 +56,16 @@ router.use(
router.use( router.use(
'/groups', '/groups',
auth(), auth(),
raExpressMongoose(require('../../../models/group/group').default, { raExpressMongoose(require('../../../../models/group/group').default, {
q: ['name'], q: ['name'],
}) })
); );
router.use( router.use(
'/file', '/file',
auth(), auth(),
raExpressMongoose(require('../../../models/file').default, { raExpressMongoose(require('../../../../models/file').default, {
q: ['objectName'], q: ['objectName'],
}) })
); );
export { router }; export { router as apiRouter };

@ -0,0 +1,37 @@
/**
* Network
*/
import { Router } from 'express';
import { broker } from '../broker';
import { auth } from '../middleware';
import _ from 'lodash';
const router = Router();
router.get('/all', auth(), async (req, res) => {
res.json({
nodes: Array.from(new Map(broker.registry.nodes.nodes).values()).map(
(item) =>
_.pick(item, [
'id',
'available',
'local',
'ipList',
'hostname',
'cpu',
'client',
])
),
events: broker.registry.events.events.map((item) => item.name),
services: broker.registry.services.services.map((item) => item.name),
actions: Array.from(new Map(broker.registry.actions.actions).keys()),
});
});
router.get('/ping', auth(), async (req, res) => {
const pong = await broker.ping();
res.json(pong);
});
export { router as networkRouter };

@ -33,6 +33,7 @@
"react-admin": "^4.6.3", "react-admin": "^4.6.3",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-router-dom": "^6.5.0", "react-router-dom": "^6.5.0",
"tailchat-server-sdk": "workspace:^0.0.14",
"ts-node": "^10.9.1" "ts-node": "^10.9.1"
}, },
"devDependencies": { "devDependencies": {

Loading…
Cancel
Save