You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.7 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. import express from "express";
  2. import { Server } from "ws";
  3. import http from "http";
  4. import bodyParser from "body-parser";
  5. import morgan from "morgan";
  6. import multer from "multer";
  7. import cors from 'cors';
  8. import path from "path";
  9. import cmdRouter from "./routes/cmd";
  10. import authRouter from "./routes/auth";
  11. import measureRouter from "./routes/measure";
  12. import measureAnalysisRouter from "./routes/measureAnalysis";
  13. import measureDataRouter from "./routes/measureData";
  14. import railRouter from "./routes/rail";
  15. import calibrationRouter from "./routes/calibration";
  16. // import { defaultStatus, StatusDatagram } from "./types/wsTypes";
  17. import { WsProxy } from "./utils/wss";
  18. import { ContextMessage, defaultContext, defaultMeasureState } from "./types/wsTypes";
  19. const app = express();
  20. app.use(express.static("public"));
  21. app.use(bodyParser.urlencoded());
  22. app.use(bodyParser.json());
  23. app.use(morgan("dev"));
  24. app.use(cors());
  25. const server = http.createServer(app);
  26. WsProxy.addActionForClientConnect((ws) => {
  27. // DeviceContext
  28. ws.send(
  29. JSON.stringify({
  30. messageType: "DeviceContext",
  31. data: app.locals["context"],
  32. path: "/deviceContext",
  33. })
  34. );
  35. })
  36. // 在HTTP服务器上初始化WebSocket服务器
  37. WsProxy.init(server);
  38. // const wss = new Server({ server });
  39. app.locals["context"] = defaultContext;
  40. app.locals["measure"] = defaultMeasureState;
  41. // app.get("/", (req, res) => {
  42. // res.send("Hello World!");
  43. // });
  44. app.use("/api/cmd", cmdRouter);
  45. app.use("/api/auth", authRouter);
  46. app.use("/api/measurement-analysis", measureAnalysisRouter);
  47. app.use("/api/measurement-task", measureRouter);
  48. app.use("/api/measurement-data", measureDataRouter);
  49. app.use("/api/standard-rail", railRouter);
  50. app.use("/api/calibration", calibrationRouter);
  51. const storage = multer.diskStorage({
  52. destination: function (req, file, cb) {
  53. // 指定文件存储的目录
  54. cb(null, 'uploads/');
  55. },
  56. filename: function (req, file, cb) {
  57. // 指定文件保存的文件名
  58. const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
  59. cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname));
  60. }
  61. });
  62. const upload = multer({ storage: storage });
  63. // 创建上传文件的路由
  64. app.post('/upload', upload.single('file'), (req, res) => {
  65. if (!req.file) {
  66. res.status(400).json({msg:'未收到文件'});
  67. } else {
  68. res.json({msg:'文件上传成功!文件路径:' + req.file.path});
  69. }
  70. });
  71. //@ts-ignore
  72. app.use((err, req, res, next) => {
  73. console.error(err.stack);
  74. res.status(500).send("Something broke!");
  75. });
  76. // 监听端口
  77. const PORT = process.env.PORT || 8080;
  78. server.listen(PORT, () => {
  79. console.log(`Server is listening on port ${PORT}`);
  80. });