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
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}`);
|
|
});
|