所以我的server.js文件中有两个功能,一个是POST请求,用于推送来自传感器的传入数据,使用了私有API密钥:app.post(/api/:key/)
另一个用于将结果数据推送到mongoDB集合:app.post('/saveData')
下面的代码尽我所能,我所做的就是通过testArray
方法将conCat变量传递到全局数组splice()
中。然后,我在app.post('/ saveData')函数中将testArray
作为参数传递。
server.js
var express = require("express");
var cors = require("cors");
var bodyParser = require("body-parser");
var app = express();
var mongoose = require("mongoose");
var Users = require("./routes/Users");
let db = require("./database");
var port = process.env.PORT || 5000;
const server = require("http").Server(app);
const io = require("socket.io")(server);
server.listen(8070);
io.sockets.on("connection", function (socket) {
socket.on("create_room", function (room) {
console.log(chalk.green("User Joined:", room));
socket.join(room);
});
});
app.use(bodyParser.json());
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/users", Users);
const mongoURI = "my_connection_string";
mongoose
.connect(mongoURI, { useNewUrlParser: true })
.then(() => console.log("MongoDB Connected"))
.catch((err) => console.log(err));
var arrayTest = [];
app.post("/api/:key", function (request, response) {
var key = request.params.key;
var myData = request.body;
io.sockets.in(key).emit("myData", { myData, key });
response.send({
myData,
key,
});
var conCat = [key, myData];
console.log(conCat);
arrayTest.splice(0, 1, conCat)
});
db.onConnect(() => {
let SavedData = require('./models/sdata');
let savedData = new SavedData();
//post data to DB
app.post('/saveData', function(req, res) {
console.log(req.body)
res.send(200)
savedData.addnewSave(arrayTest)
console.log("User clicked save button"))
});
});
这个问题是,它似乎是静态的(以及def noob-y),也可能有多个传感器通过/api/:key
端点发送数据,并且显然,它确实无法工作很好,因为它不考虑数据或键的更改。
我希望有人可以向我展示将变量动态传递给另一个函数的最佳方法,以便它可以解释数据的变化。我确实看到使用callback()是有前途的,但是我不确定当它在快速app.post()
函数中时如何使用它。
该项目的性质要求使用另一个端点:app.post('/saveData')
为用户提供保存数据的选项,否则我将只在/api/:key
函数内删除了saveData.addnewSave(conCat)。
如果您读了这么多,谢谢。