2016-12-06 3 views
-1

Я делаю 2 сервераКак отправить запрос POST на другой сервер Node.js

var express = require('express'); 
var querystring = require('querystring'); 
var http = require('http'); 

var app = express(); 
app.get('/', function (req, res) { 
    var data = querystring.stringify({ 
    username: 'myname', 
    password: 'pass' 
    }); 

    var options = { 
    host: 'localhost', 
    port: 8081, 
    path: '/demo', 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': Buffer.byteLength(data) 
    } 
    }; 

    var httpreq = http.request(options, function (response) { 
    response.setEncoding('utf8'); 
    response.on('data', function (chunk) { 
     console.log("body: " + chunk); 
    }); 
    response.on('end', function() { 
     res.send('ok'); 
    }) 
    }); 
    httpreq.write(data); 
    httpreq.end(); 
}); 

app.listen(8090, function(){ 
    console.log('Server start on 8090'); 
}); 

Второй является

var express = require('express'); 
var app = express(); 

app.post('/demo', function(req, res){ 
    console.log('Body : ', req.body); 
}); 

app.listen(8081, function(){ 
    console.log('Server Start on 8081'); 
}); 

Я хочу отправить данные из локального хоста: 8090 на локальный хост: 8081.

Но на 2-й стороне сервера, когда я пытаюсь напечатать req.body он показывает мне

Server Start on 8081 
Body : undefined 

Помогите мне найти решение. И если у вас есть лучший код, тогда это будет хорошо для меня.

Благодарим вас за помощь.

ответ

1

Причина, почему ваше тело не определено в вашем экспресс-сервере происходит потому, что вы не используете body-parser промежуточное программное обеспечение. Экспресс не может проанализировать тело запроса для Content-Type x-www-form-urlencoded, как вы указали в своем запросе. Кроме того, в вашем запросе вы не отправляете данные через тело вашего запроса, вы отправляете его в строку запроса, поэтому ваш экспресс-маршрут должен проверять строку запроса, а не тело.

Вам нужно, чтобы сделать ваш Экспресс выглядеть следующим образом:

const express = require('express'); 
const bodyParser = require('body-parser'); 

const app = express(); 
const port = process.env.PORT || 1337; 

app.use(bodyParser.urlencoded({ extended: true }); // Parse x-www-form-urlencoded 

app.post('/demo', (req, res) => { 
    console.log(`Query String: ${req.query}`); 
    console.log(`Body: ${req.body}`); 
}); 

app.listen(port,() => { 
    console.log(`Listening on ${port}`); 
}); 
+1

Ненавижу эти глупые ошибки. Простите за это. И спасибо за вашу помощь. –

-1

Вы можете сделать запрос, как этот

require('request').post(
    "localhost:8081/demo", 
    {form: 
     { 
      username: "name", 
      password: "any" 
     } 
    }, 
    function(error, response, body){ 
     console.log(body); 
    } 
); 
+0

вы можете дать мне демонстрационный пример? –

+0

@MithilAmin Какие данные необходимо отправить? –

+0

Просто отправьте имя пользователя: 'имя', пароль: 'any' –

Смежные вопросы