假设我们有一个server.js,里面的内容用于响应客户端的fetch请求,如果fetch请求很少,我们通常会把所有内容写到server.js里,例如:
const server = express();
server.post("/api/v1/sendgraindata", (req, res)...
server.get("/api/v1/guarddata", (req, res)...
server.get("/api/v1/skytemphudivalue", (req, res)....
server.post("/api/v1/startstopinner", (req, res)....
....
但是,这样把数据操作与控制操作混杂在一起了,而且如果需要fetch的请求特别多,就很难寻找想要修改的内容了,所以为了更清晰一些,我们可以这样:
一个完整的小server.js:
const fs = require("fs");
const path = require("path");
const cors = require("cors");
const express = require("express");
//'''''''''''''''''''''''''''''''''' 导入路由 ''''''''''''''''''''''''''''''''''''''''''''
const commRouters = require("./routers/commRouter"); //公用路由 routes文件夹下的commRouter.js文件
const storeRouters = require("./routers/storeRouter"); //数据路由 routes文件夹下的storeRouter.js文件
const measureRouters = require("./routers/measureRouter"); //控制路由 routes文件夹下的measureRouter.js文件
//'''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''
const server = express();
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
server.use(express.json());
server.use(express.urlencoded({ extended: true }));
server.use(cors());
server.use(express.static(path.join(__dirname, "/public")));
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
server.use("/api/v1/comm", commRouters);
server.use("/api/v1/store", storeRouters);
server.use("/api/v1/measure", measureRouters);
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
const port = fs.readFileSync(path.join(__dirname, "/port.txt"), "utf-8");
//监听http请求端口
server.listen(port, () => {
console.log(`listening on port ${port}...`);
});
1 commRouter.js:
const express = require("express");
const commRouter = express.Router();
commRouter.get("/userbycodepassword", (req, res) => {
.....
});
});
module.exports = commRouter;
2 storeRouter.js:
const express = require("express");
const storeRouter = express.Router();
storeRouter.get("/storebystorename", (req, res) => {
});
storeRouter.delete("/storebyid", (req, res) => {
...
});
storeRouter.put("/weatherstationinfo", (req, res) => {
....
});
storeRouter.put("/updatestorebyid", (req, res) => {
...
});
module.exports = storeRouter;
3 measureRouter.js
const express = require("express");
const measureRouter = express.Router();
const net = require("net");
measureRouter.put("/plcdevice", (req, res) => {
...
});
measureRouter.get("/plcdevice", (req, res) => {
});
1 客户端fetch:
const res = await fetch(
`${serverAddress}/api/v1/comm/userbycodepassword?code=${code}&&password=${password}`
);
将自动由后端的commRouter.js处理
2 客户端fetch:
const res = await fetchWithTimeout(
`${serverAddress}/api/v1/measure/rtuskystoretemphudi?branchnum=${branchNum}&&address=${address}&&count=${count}&&waitbytes=${waitbytes}&&ip=${ip}`,
options
);
将自动由后端的measureRouter.js处理
把server.js里的路由分到多个文件里处理,将使得主文件更清晰,查找路由更方便.
fetchWithTimeout用于在循环里fetch,闲下来时作为另一个话题写.