客户端程序,用于与nodejs中的回显服务器连续对话

时间:2019-07-22 17:55:32

标签: javascript node.js express server

我绝对是nodejs的初学者。我已经在nodejs中创建了一个echo服务器。老实说,我遵循了一些YouTube教程。服务器代码没有错。我想创建一个客户端程序来与该服务器通信。我不想使用telnet client或任何类似的东西。 “连续”是指服务器和客户端应保持连接,直到使用ctrl+c手动关闭服务器为止。这是我的server.js。

const express = require('express');
const bodyParser=require('body-parser');
var server=express();
server.use(bodyParser.urlencoded({extended: false}));
server.use(bodyParser.json());
server.post("/", function (req, res) {
  console.log("I got: "+req.body.message);
  res.send(req.body.message);
});
server.listen(3000, function() {
  console.log("Express echo server is listening on port 3000");
})

我不是说嘿,为我写代码。实际上,我也尝试过。这是我的client.js

var request = require('request');
var arg="";
process.argv.slice(2).forEach(function (val, index, array) {
  arg+=val +" ";
});
request.post({
  url: "http://localhost:3000",
  json: true,
  body: {message: arg}
}, function (err, response, body) {
  if(!err && response.statusCode==200) {
    console.log(body);
  }
});

但是客户端也使用命令行参数发送一次数据。

node client.js hello

PS:我正在使用这些npm模块expressbody-parserrequest

1 个答案:

答案 0 :(得分:1)

您制作的是使用express的 HTTP服务器

服务器运行正常,但客户端关闭,因为您仅向服务器发出单个请求。因此,正在发生的事情是预期的行为。

因此,有多种方法, 最简单的方法是,使用readline或其他方法连续读取您键入的行并将其发送到服务器:

const request = require('request');
const readline = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout
});

readline.setPrompt('msg: ');
readline.prompt();

readline.on('line', function(input) {
  if(input === 'close') return readline.close();
  request.post({
    url: "http://localhost:3000",
    json: true,
    body: {message: input}
  }, function (err, response, body) {
    readline.prompt();
  });
}).on('close', function() {
    console.log('Closed');
    process.exit(0);
});

但是正确的方法是使用sockets之类的socket-io在服务器和客户端之间建立持久连接。阅读here了解更多信息。