1

在我的客户端机器中,我有以下代码

client.js
    var fs      = require('fs');
    var http    = require('http');
    var qs      = require('querystring');
    var exec    = require('child_process').exec;
    var server = http.createServer(function(req, res) {
      switch(req.url) {
            case '/vm/list':
                getVms(function(vmData) {
                    res.end(JSON.stringify(vmData));
                });
                break;
            case '/vm/start':
                req.on('data', function(data) {
                    console.log(data.toString())
                    exec('CALL Hello.exe', function(err, data) {
                        console.log(err)
                        console.log(data.toString())
                        res.end('');
                    });
                });

                break;
        }
    });

    server.listen(9090);
    console.log("Server running on the port 9090");

在我的服务器端机器中使用以下 helper.js

var options = {
        host: '172.16.2.51',
        port: 9090,
        path: '/vm/start',
        method: 'POST'
    };

    var req = http.request(options, function(res) {
        res.on('data', function(d) {
            console.log(d.toString());
        });
    });

    req.on('error', function(e) {
        console.error(e);
    });


req.end('');

在运行 node helper.js 时{ [Error: socket hang up] code: 'ECONNRESET' }

它不打印客户端中包含的 data.tostring() 。

4

1 回答 1

1

尝试res.writeHead(200);在您的 switch 语句之前添加。

此方法只能在消息上调用一次,并且必须在调用 response.end() 之前调用。

来自http://nodejs.org/api/http.html#http_response_writehead_statuscode_reasonphrase_headers

更新

经过我们的讨论,以下client.js工作:

var fs      = require('fs');
var http    = require('http');
var qs      = require('querystring');
var exec    = require('child_process').exec;
var server = http.createServer(function(req, res) {
  switch(req.url) {
        res.writeHead(200);
        case '/vm/list':
            getVms(function(vmData) {
                res.end(JSON.stringify(vmData));
            });
            break;
        case '/vm/start':
            req.on('data', function(data) {
                console.log(data.toString())
                exec('CALL Hello.exe', function(err, data) {
                    console.log(err)
                    console.log(data.toString())
                });
            });
            req.on('end', function() {
                res.end('');
            });

            break;
    }
});

server.listen(9090);
console.log("Server running on the port 9090");
于 2013-10-31T07:55:06.353 回答