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 ステートメントの前に追加してみてください。

このメソッドは、メッセージに対して 1 回だけ呼び出す必要があり、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 に答える