响应是未定义的节点js

时间:2017-06-25 11:31:34

标签: javascript node.js http express

我是初学者,我对服务器的响应有些麻烦。

基本上我正在使用Express来使其工作,但它没有,并在客户端服务器文件中的request.body中返回'undefined'。

这是我服务器上的路由器代码。此代码工作正常,并在邮递员中发送良好的响应:

child = childProcess.exec('javac code.java', function (err, output, outerr) {
if (err) {
    console.log(err.message);
    res.end(err.message);
}
else if (outerr) {
    res.end(outerr);
}
else if (output) {
    childProcess.exec('java code', function (err, output, outerr) {
        if (err) {
            res.end(err.message);
        }
        else if (outerr) {
            res.end(outerr);
        }
        else if (output) {
            res.end(output);
        }                                                      
    ...And the closing quotes

这是另一个客户端服务器。 这个服务器向上面的服务器发出请求,主体中有java代码来执行它。

它正在发送空响应并在控制台中 它的意思是'recived response:undefined'

router.post('/codeEditor', function (req, res) {
    var request = http.request({port: 8000, method: 'POST', path: '/java', headers:{'Content-type':'application/json'}}, function (response) {
        console.log('recived response: '+ response.body);
        res.end(response.body);
    });
    request.write(JSON.stringify({'sample':'sample'}));
    request.end();
    request.on('error', function(e) {
        console.log('problem with request: ' + e.message);
    });

});

request.write(JSON.stringify({'sample':'sample'}));用于测试目的,因为它应该传递req.body对象。

我已经安装了body.parser,它看起来像这样:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var router = require('./routes');


app.use(bodyParser.json({type: 'application/json'}));
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.text({type: '*/*'}));

app.use('/', router);


app.listen(8000, function () {
    console.log('server listening on port 8000');
});

所以我不知道这里发生了什么 谢谢你的帮助! :)

2 个答案:

答案 0 :(得分:0)

我做了

我不知道它是如何可能的,但我只是改变了客户端服务器代码:

 var request = http.request({port: 8000, method: 'POST', path: '/java', headers:{'Content-type':'application/json'}}, function (response) {
    console.log('recived response: '+ response.body);
    res.end(response.body);
});

要:

 var request = http.request({port: 8000, method: 'POST', path: '/java', headers:{'Content-type':'text/plain'}}, function (response) {
        response.on('data', function (chunk) {
            res.end(chunk);
        });
    });

就是这样!所以不是一个很大的改变,但它让我今天感到高兴:))

答案 1 :(得分:-1)

您在java执行服务器上使用res.end。哪个结束请求没有任何数据。 如果您打算发回数据,请使用res.send

This提供有关两者之间差异的详细信息。