我正在尝试创建一个API来从mongodb获取最新文档并将其显示在浏览器中。仅当刷新浏览器时才显示最新文档。我正在尝试使用此端点创建一个带有温度、湿度和 EC 值自动更新的仪表板。 这是我使用 Node.js 的 API 代码。
const app = express();
//middle ware
app.use(express.json());
app.use(cors());
const port = ;
// to specify in which db to save write the DB name before "?retryWrites"
const uri = '';
const sensorSchema = {
temperature: Number,
humidity: Number,
ec: Number,
date: Date,
};
const Sensor = new mongoose.model("Sensor",sensorSchema);
app.listen(port,()=>
{
console.log(`Server started at http://localhost:${port}`)
});
const pipeline = [ { $match: { runtime: { $lt: 15 } } } ];
app.get('/get-readings', async (req, res) => {
try {
// Find the latest sensor reading
const latestDoc = await Sensor.findOne({}, {}, { sort: { date: -1 } });
res.json(latestDoc)
const update = Sensor.watch(pipeline);
for (const change of update) {
console.log("Received change:\n", change);
//res.json(change)
}
} catch (error) {
console.error('Error fetching sensor data:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
const connectDB = async () =>
{
try {
await mongoose.connect(uri);
console.log('MongoDB connected');
} catch (error) {
console.log(error);
}
}
connectDB();
最新文档如下所示:
使用 MongoDB。watch() 有效,但前提是我 console.log 最新文档。如果我取消注释 res.json(change),这将触发错误“在将标头发送到客户端后无法设置标头”。
任何有关如何处理的帮助或指示将不胜感激。
您在这里有几个选择。
我建议对此进行一些独立阅读,但本质上它们都是让您更频繁地从某些服务接收数据的方法。
最容易实现的方法是定期轮询——您可以按一定时间间隔运行客户端代码。
如果您需要客户端和服务器之间进行大量通信和快速反馈,则套接字方法将是最好的。查看 https://nodejs.org/docs/latest/api/net.html#netcreateconnection。您还可以看看他的方法https://nodejs.org/docs/latest/api/http2.html#server-side-example
Webhook 仅适用于服务器到服务器的通信,因为它需要您公开端点来接收“推送”给您的数据