Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js http POST不工作_Node.js_Http_Post - Fatal编程技术网

node.js http POST不工作

node.js http POST不工作,node.js,http,post,Node.js,Http,Post,我无法让node.js服务器向另一个node.js服务器发出http POST请求。我相当确定问题在于http库或我如何使用它,因为我可以编写一个小的HTML页面,完全按照我的意愿执行POST 下面是如何设置接收帖子的服务器 var server = restify.createServer({ name: 'some server', version: "1.0.0" }); server.use(restify.acceptParser(server.acceptable));

我无法让node.js服务器向另一个node.js服务器发出http POST请求。我相当确定问题在于http库或我如何使用它,因为我可以编写一个小的HTML页面,完全按照我的意愿执行POST

下面是如何设置接收帖子的服务器

var server = restify.createServer({
   name: 'some server',
   version: "1.0.0"
});

server.use(restify.acceptParser(server.acceptable));
server.use(restify.bodyParser());    
server.post('/theurl/', handler.handlePost);

server.listen(config.port, function() {
   console.log("starting server on port %d", server.address().port);
});
在handlePost方法中,我正在执行以下操作:

exports.handlePost = function(req, res, next) {
   console.log("body: %s", JSON.stringify(req.body));
   console.log("params: %s", JSON.stringify(req.params));
}
下面是发送帖子的服务器是如何做的(这是直接从

var选项={
主持人:“127.0.0.1”,
端口:8090,
路径:'/theurl/',
方法:“发布”
};
var req=http.request(选项、函数(res){
ses.setEncoding('utf8');
res.on('data',函数(块){
log('BODY:'+chunk);
});
});
请求开启('错误',功能(e){
log('请求问题:'+e.message);
});
请求写入(“xml”);
请求结束();
当我运行POST时,在handlePost方法中,req.body和req.params都是未定义的

但是如果我把下面的HTML放到浏览器中,我就可以很好地发布到服务中

<html>
   <head>
     <script>
       function doPost()
       {
         var xmlhttp = new XMLHttpRequest();
         xmlhttp.open("POST","http://localhost:8090/theurl/",false);
         xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
         xmlhttp.send("<some>xml</some>");
       }
     </script>
   </head>
   <body>
      <button type="button" onclick="doPost()">POST data</button>   
   </body>
</html>

函数doPost()
{
var xmlhttp=new XMLHttpRequest();
open(“POST”http://localhost:8090/theurl/“,假);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
发送(“xml”);
}
发布数据

那么,我是不是在node.js http库中做了一些错误的事情?

好吧,在我发布这篇文章之后,我意识到我在HTML版本中做的一件事是在node.js版本中没有做的,那就是设置请求的内容类型。如果我将选项更改为此,它将起作用:

var options = {
   host: '127.0.0.1',
   port: 8090,
   path: '/theurl/',
   method: 'POST',
   headers: { "Content-type": "application/x-www-form-urlencoded" }
};
使用下面的代码

var querystring = require('querystring');

    var data = querystring.stringify({
          username: yourUsernameValue,
          password: yourPasswordValue
        });

    var options = {
        host: 'my.url',
        port: 80,
        path: '/login',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': data.length
        }
    };

    var req = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            console.log("body: " + chunk);
        });
    });

    req.write(data);
    req.end();

确保已将这些内容添加到
app.js
文件中:

var bodyParser = require('body-parser'); // npm i body-parser

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
var bodyParser = require('body-parser'); // npm i body-parser

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())