我绝对是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模块express
,body-parser
和request
答案 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了解更多信息。