【问题标题】:Run a node.js file continuously using an HTTP request使用 HTTP 请求连续运行 node.js 文件
【发布时间】:2020-06-07 17:15:14
【问题描述】:

我正在使用 node.js 和 express 来创建应用程序,我有一个文件 TCPServer.js,我用它来不断地轮询 TCP/IP 服务器。我希望能够向读取 IP 地址和端口号的数据库发送单个 HTTP 请求,然后使用该数据调用我的 TCPServer.js 文件,该文件依次轮询 TCP 服务器。

读取数据库有效,HTTP 请求适用于对 TCPServer 的单次调用,但每当我尝试不断轮询 TCP 服务器时,我都会从服务器收到 1 个轮询响应,然后抛出 500 错误。

因此,如果在 TCPServer.js 中仅使用getInputData(ipAddress, connPort),那么 HTTP 请求就可以正常工作,并从我的 TCP 服务器返回一次响应和 200 响应。使用setInterval(getInputData(ipAddress, connPort), 2000),我得到了一次数据和一个 500 错误响应。我可以让它每 2 秒轮询一次吗?

TCPServer.js


function getInputData(ipAddress, port) {
          "Function for polling TCP Server runs in here"
}

const iModStart = function startInputModule(ipAddress, connPort) {
  setInterval(getInputData(ipAddress, connPort), 2000)

}

module.exports = iModStart

用于运行 http 请求的路由处理程序


const iModuleConnect = require('../utils/TCPServer')

//run the polling to input module

router.get('/connections_connect/:id', async (req, res) => {
    const _id = req.params.id

    try {
        const connection = await Connection.findById(_id)
        if (!connection) {
            return res.status(404).send()
        } 
        if(connection) {
            console.log(connection.ipAddress)
            console.log(connection.port)
            iModuleConnect(connection.ipAddress, connection.port)

        }
        res.send(connection)       
    } catch(e) {
        res.status(500).send()
    }
})
module.exports = router

【问题讨论】:

  • 是什么导致了500 错误?你能打印出错误e吗?

标签: javascript node.js express httprequest


【解决方案1】:

问题是setInterval 需要一个回调函数作为它的第一个参数,但是你将已经执行的getInputData 函数的结果传递给它。

显然这工作一次,因为函数在第一个间隔之前执行,但是一旦在 2000 毫秒之后达到间隔,就没有回调调用,节点将抛出 TypeError [ERR_INVALID_CALLBACK]: Callback must be a function 错误。

要解决此问题,您需要将函数参数绑定到 getInputData 并将其作为回调传递给 setInterval

const iModStart = function startInputModule(ipAddress, connPort) {
      setInterval(getInputData.bind(getInputData, ipAddress, connPort), 2000);
}

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 2012-06-09
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多