|
@@ -1,7 +1,13 @@
|
|
|
import fs from "fs";
|
|
|
import path from "path";
|
|
|
import glob from "glob";
|
|
|
-import express, { application } from "express";
|
|
|
+import express, {
|
|
|
+ application,
|
|
|
+ Request,
|
|
|
+ Response,
|
|
|
+ NextFunction,
|
|
|
+ Errback,
|
|
|
+} from "express";
|
|
|
import cors from "cors";
|
|
|
import helmet from "helmet";
|
|
|
import * as http from "http";
|
|
@@ -12,6 +18,13 @@ import { router as partitionsRouter } from "./partitions";
|
|
|
import { router as schemaRouter } from "./schema";
|
|
|
import { router as cronsRouter } from "./crons";
|
|
|
import { pubSub } from "./events";
|
|
|
+import {
|
|
|
+ TransformResInterceptor,
|
|
|
+ LoggingInterceptor,
|
|
|
+ ErrorInterceptor,
|
|
|
+} from "./interceptors";
|
|
|
+
|
|
|
+const PLUGIN_DEV = process.env?.PLUGIN_DEV;
|
|
|
|
|
|
const app = express();
|
|
|
const PORT = 3000;
|
|
@@ -35,70 +48,60 @@ app.use(
|
|
|
);
|
|
|
app.use(express.json({ limit: "150MB" }));
|
|
|
|
|
|
-const router = express.Router();
|
|
|
-
|
|
|
-const getDirectories = (
|
|
|
- src: string,
|
|
|
- callback: (err: Error, res: [string]) => void
|
|
|
-) => {
|
|
|
- glob(src + "/**/*", callback);
|
|
|
-};
|
|
|
-
|
|
|
-const cfgs: any = [];
|
|
|
+// TransformResInterceptor
|
|
|
+app.use(TransformResInterceptor);
|
|
|
+// LoggingInterceptor
|
|
|
+app.use(LoggingInterceptor);
|
|
|
|
|
|
-// export const pubSub = new PubSub();
|
|
|
+const router = express.Router();
|
|
|
|
|
|
+// Init WebSocket server event listener
|
|
|
io.on("connection", (socket: Socket) => {
|
|
|
console.log("socket.io connected");
|
|
|
- socket.emit("greeting-from-server", {
|
|
|
- greeting: "Hello Client",
|
|
|
- });
|
|
|
- socket.on("greeting-from-client", (message) => {
|
|
|
- console.log(message);
|
|
|
- });
|
|
|
+ // socket.emit("greeting-from-server", {
|
|
|
+ // greeting: "Hello Client",
|
|
|
+ // });
|
|
|
+ // socket.on("greeting-from-client", (message) => {
|
|
|
+ // console.log(message);
|
|
|
+ // });
|
|
|
socket.on("COLLECTION", (message: any) => {
|
|
|
- console.log("received COLLECTION: %s", message);
|
|
|
+ // console.log("received COLLECTION: %s", message);
|
|
|
socket.emit("COLLECTION", { data: message });
|
|
|
});
|
|
|
socket.on("events", (message: any) => {
|
|
|
- console.log("received events: %s", message);
|
|
|
+ // console.log("received events: %s", message);
|
|
|
const response = [1, 2, 3];
|
|
|
response.map((item) => {
|
|
|
setImmediate(() => socket.emit("events", { data: item }));
|
|
|
});
|
|
|
});
|
|
|
socket.on("identity", (message: any) => {
|
|
|
- console.log("received identity: %s", message);
|
|
|
+ // console.log("received identity: %s", message);
|
|
|
socket.emit("identity", `identity data: ${message}`);
|
|
|
});
|
|
|
pubSub.on("ws_pubsub", (msg) => {
|
|
|
const { event, data } = msg;
|
|
|
- console.log(`pubsub: ${event}`);
|
|
|
+ // console.log(`pubsub: ${event}`);
|
|
|
socket.emit(event, data);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
-// const customInterceptor = (request: any, response: any, next: any) => {
|
|
|
-// const oldSend = response.send;
|
|
|
-// response.send = (data: any) => {
|
|
|
-// // arguments[0] (or `data`) contains the response body
|
|
|
-// // arguments[0] = "modified : " + arguments[0];
|
|
|
-// console.log(data);
|
|
|
-// const newData = {...data, test: "customInterceptor"}
|
|
|
-// console.log(newData);
|
|
|
-// oldSend.call(response, newData);
|
|
|
-// };
|
|
|
-// next();
|
|
|
-// };
|
|
|
-// app.use(customInterceptor);
|
|
|
+// Utils: read files under specified directories
|
|
|
+const getDirectories = (
|
|
|
+ src: string,
|
|
|
+ callback: (err: Error, res: [string]) => void
|
|
|
+) => {
|
|
|
+ glob(src + "/**/*", callback);
|
|
|
+};
|
|
|
|
|
|
-getDirectories("../../src", (err: Error, res: [string]) => {
|
|
|
- if (err) {
|
|
|
- console.log("Error", err);
|
|
|
+// Read plugin files and start express server
|
|
|
+getDirectories("../../src", (dirErr: Error, dirRes: [string]) => {
|
|
|
+ const cfgs: any = [];
|
|
|
+ if (dirErr) {
|
|
|
+ console.log("Reading plugin directory Error", dirErr);
|
|
|
} else {
|
|
|
- res.forEach((item: string) => {
|
|
|
+ dirRes.forEach((item: string) => {
|
|
|
console.log(item);
|
|
|
- // if (path.extname(item) === ".json") {
|
|
|
if (item.endsWith("/config.json")) {
|
|
|
const fileData = fs.readFileSync(item);
|
|
|
const json = JSON.parse(fileData.toString());
|
|
@@ -120,13 +123,12 @@ getDirectories("../../src", (err: Error, res: [string]) => {
|
|
|
data: { api: pluginPath },
|
|
|
} = cfg;
|
|
|
if (!pluginPath) return;
|
|
|
- // const pluginRouter = require(`${dir}/server/app`);
|
|
|
const {
|
|
|
default: { router: pluginRouter },
|
|
|
} = await import(`../${dir}/server/app`);
|
|
|
console.log(pluginPath);
|
|
|
console.log(pluginRouter);
|
|
|
- app.use(`/${pluginPath}`, pluginRouter);
|
|
|
+ router.use(`/${pluginPath}`, pluginRouter);
|
|
|
});
|
|
|
|
|
|
router.use("/milvus", connectRouter);
|
|
@@ -135,17 +137,14 @@ getDirectories("../../src", (err: Error, res: [string]) => {
|
|
|
router.use("/schema", schemaRouter);
|
|
|
router.use("/crons", cronsRouter);
|
|
|
|
|
|
- router.get("/healthy", (request, response) => {
|
|
|
- response.json({ status: 200 });
|
|
|
+ router.get("/healthy", (req, res, next) => {
|
|
|
+ res.json({ status: 200 });
|
|
|
+ next();
|
|
|
});
|
|
|
|
|
|
app.use("/api/v1", router);
|
|
|
- app.all("/socket.io/", (request, response) => {
|
|
|
- response.send("ok");
|
|
|
- });
|
|
|
- // app.listen(PORT, () => {
|
|
|
- // console.log(`Example app listening at http://localhost:${PORT}`);
|
|
|
- // });
|
|
|
+ // ErrorInterceptor
|
|
|
+ app.use(ErrorInterceptor);
|
|
|
// start server
|
|
|
server.listen(PORT, () => {
|
|
|
console.log(`Server started on port ${PORT} :)`);
|