簡體   English   中英

在Node.js應用中啟動Node.js TCP服務器

[英]Start a nodejs tcp server within nodejs app

我的用例是在我正在編寫的nodejs應用程序內啟動和停止tcp服務器。

所以我有一個index.js,它在端口3000上啟動了Web服務器。使用端點“ /”和“ / start”,我想分別獲取服務器的狀態並啟動服務器。 我還想通過socket.io顯示服務器的狀態,但是稍后再說。

現在,我得到一個

TypeError:將圓形結構轉換為JSON

我認為可能歸因於以下服務器對象的錯誤。

如何通過REST端點啟動和停止tcp服務器?

// server.js
'use strict'

var net = require('net')
var server = false

exports.get = function() {
    return server
}

exports.start = function(port, host) {

  if (!server) {
    server = net.createServer(handleConnection).listen(port, host)
    return server
  }
}

exports.stop = function() {
  if (server) {
    server.close(() => {
        console.log(`server.close called`)
    })
    server = null
    return server
  }
}

function handleConnection(socket) {
 ...
}

這是index.js

// index.js
'use strict'

var net = require('net')
var http = require('http')
var express = require('express')
var bodyParser = require('body-parser')

var app = express()

var addServer = require('./server')

var PORT = 3000
var HOSTNAME = '127.0.0.1'

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

var server = http.createServer(app).listen(PORT, HOSTNAME, () => {
    console.log('http.createServer started')
})

app.get('/', (req, res) => {
  // get addServer status
  addServer.get()
  res.status(200).json({ status: 'success', command: addServer.get() })
})

app.get('/start', (req, res) => {
    // start addServer
    addServer.start(9000, '127.0.0.1')
    res.status(200).json({ status: 'success', response: '' })
})

您正在嘗試通過json返回服務器對象。

res.status(200).json({ status: 'success', command: addServer.get() })

嘗試不使用它。

res.status(200).json({ status: 'success' })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM