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

import express from "express";
import { Server } from "ws";
import http from "http";
import bodyParser from "body-parser";
import morgan from "morgan";
import multer from "multer";
import cors from 'cors';
import path from "path";
import cmdRouter from "./routes/cmd";
import authRouter from "./routes/auth";
import measureRouter from "./routes/measure";
import measureAnalysisRouter from "./routes/measureAnalysis";
import measureDataRouter from "./routes/measureData";
import railRouter from "./routes/rail";
import calibrationRouter from "./routes/calibration";
// import { defaultStatus, StatusDatagram } from "./types/wsTypes";
import { WsProxy } from "./utils/wss";
import { ContextMessage, defaultContext, defaultMeasureState } from "./types/wsTypes";
const app = express();
app.use(express.static("public"));
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
app.use(morgan("dev"));
app.use(cors());
const server = http.createServer(app);
WsProxy.addActionForClientConnect((ws) => {
// DeviceContext
ws.send(
JSON.stringify({
messageType: "DeviceContext",
data: app.locals["context"],
path: "/deviceContext",
})
);
})
// 在HTTP服务器上初始化WebSocket服务器
WsProxy.init(server);
// const wss = new Server({ server });
app.locals["context"] = defaultContext;
app.locals["measure"] = defaultMeasureState;
// app.get("/", (req, res) => {
// res.send("Hello World!");
// });
app.use("/api/cmd", cmdRouter);
app.use("/api/auth", authRouter);
app.use("/api/measurement-analysis", measureAnalysisRouter);
app.use("/api/measurement-task", measureRouter);
app.use("/api/measurement-data", measureDataRouter);
app.use("/api/standard-rail", railRouter);
app.use("/api/calibration", calibrationRouter);
const storage = multer.diskStorage({
destination: function (req, file, cb) {
// 指定文件存储的目录
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
// 指定文件保存的文件名
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname));
}
});
const upload = multer({ storage: storage });
// 创建上传文件的路由
app.post('/upload', upload.single('file'), (req, res) => {
if (!req.file) {
res.status(400).json({msg:'未收到文件'});
} else {
res.json({msg:'文件上传成功!文件路径:' + req.file.path});
}
});
//@ts-ignore
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send("Something broke!");
});
// 监听端口
const PORT = process.env.PORT || 8080;
server.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});