Nodejs接口怎么实现热更新呢?

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs接口怎么实现热更新呢?

例如:
通过"/foo"接口在数据库某张表里增加了一条记录。假设是增加前记录数是 10,增加后记录数变为 10+1。
但是"/bar"接口不能返回数据库变化后的记录。那么现在我怎么动态得让"/bar"接口去获得 11 条记录呢?是不是有某种监听的机制?
求 V 站老哥指点迷津~

16 回复

自己加个事件监听?


这是什么业务场景?

不知道你用的是什么数据库,但是基本上都有触发器这个概念的。Mongodb 的话可以使用 mongo log,在插入事件之后返回。

就是 mongodb,我去试一下

这是个 package 吗

比如为文章新增一条评论,直接存到数据库了嘛,但是我没有实时在文章里获得这条评论

你需要的是轮询或者 websocket

同#8,你这个问题不是 node 的问题,二是你前端没有更新请求啊,你后端无论怎么改,前端不把新数据拉回来,都是白搭

#7 你这是实时聊天的功能,不是评论的功能

不建议在数据库做, 作为一名非专业运维, 研发要用触发器,存储过程一般我都是直接怼回去的, 推荐用 mq , 比较重的有 rabbitmq, 轻量级的有 redis

加一个 select count 的接口啊。。

是不是可以用 socket.io

实时场景比较多可以试试 feathers.js ,小需求就简单用下 socket 吧

感谢~

在Node.js中实现接口的热更新,通常意味着在不停止服务的情况下更新代码逻辑。这可以通过多种方式实现,其中一种常见方法是使用动态模块加载。下面是一个基于Node.js的示例,展示如何实现简单的热更新机制:

  1. 创建一个模块文件(如apiModule.js),用于定义接口逻辑:
// apiModule.js
module.exports = {
    getData: () => {
        return "Old Data";
    }
};
  1. 在主服务器文件中动态加载这个模块
// server.js
const express = require('express');
const app = express();
const path = require('path');
const fs = require('fs');

let apiModule = require('./apiModule');

app.get('/data', (req, res) => {
    res.send(apiModule.getData());
});

const updateModule = () => {
    delete require.cache[require.resolve('./apiModule')];
    apiModule = require('./apiModule');
    console.log('Module updated');
};

// Simulate hot update by watching file changes (for demo purposes)
fs.watchFile(path.join(__dirname, 'apiModule.js'), updateModule);

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
  1. 修改apiModule.js文件
// Update apiModule.js
module.exports = {
    getData: () => {
        return "Updated Data";
    }
};

一旦apiModule.js文件被修改并保存,fs.watchFile将触发updateModule函数,重新加载模块,从而实现热更新。这种方法适用于开发环境或小规模应用。在生产环境中,更推荐使用成熟的热更新方案,如PM2等进程管理工具。

回到顶部