如何在Node.js中执行Curl操作

21

我想在node.js中执行这个curl操作。

curl -XPOST localhost:12060/repository/schema/fieldType -H 'Content-Type: application/json' -d '
{
  action: "create",
  fieldType: {
    name: "n$name",
    valueType: { primitive: "STRING" },
    scope: "versioned",
    namespaces: { "my.demo": "n" }
  }
}' -D -

欢迎提出建议。

3个回答

25
虽然没有专门为cURL提供的NodeJS绑定,但我们仍然可以通过命令行界面发出cURL请求。NodeJS附带了child_process模块,它可以轻松地启动进程并读取其输出。这样做非常简单。我们只需要从child_process模块导入exec方法并调用它。第一个参数是我们要执行的命令,第二个参数是一个接受错误、标准输出和标准错误的回调函数。
var util = require('util');
var exec = require('child_process').exec;

var command = 'curl -sL -w "%{http_code} %{time_total}\\n" "http://query7.com" -o /dev/null'

child = exec(command, function(error, stdout, stderr){

console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);

if(error !== null)
{
    console.log('exec error: ' + error);
}

});

编辑 这也是一个可能的解决方案:https://github.com/dhruvbird/http-sync


为什么要在命令行中使用curl,当你可以直接使用http.request或node.js呢? - Raynos
9
这只是另一个选择。他要求使用卷发器,所以我给了他卷发器 :) - mrryanjohnston
4
CURL 拥有比 http.request 更多的选项(包括代理支持)。 - Ivan Castellanos
在某些代理配置中,当curl无困扰地工作时,尝试让节点正确协商代理是非常令人恼火的。对于那些有特定需求的人来说,这是一个不错的解决方法。 - J E Carter II
如果您想处理来自curl的返回结果,可以参考此答案,附加一个监听器到子进程。https://dev59.com/mmYq5IYBdhLWcg3woB-7 - J E Carter II

14

使用request。request是从Node.js发出HTTP请求的事实标准方式。它是基于http.request的一种轻量级抽象。

request({
  uri: "localhost:12060/repository/schema/fieldType",
  method: "POST",
  json: {
    action: "create",
    fieldType: {
      name: "n$name",
      valueType: { primitive: "STRING" },
      scope: "versioned",
      namespaces: { "my.demo": "n" }
    }
  }
});

请注意,从 Node 18 开始,事实上的标准是 Fetch API - undefined


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接