Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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请求中的curl-F选项_Node.js_Aws Lambda - Fatal编程技术网

如何模拟node.js请求中的curl-F选项

如何模拟node.js请求中的curl-F选项,node.js,aws-lambda,Node.js,Aws Lambda,我试图从node.js AWS lambda向sensiolabs安全api发布一些数据。sensiolabs站点上唯一的文档记录了如何为curl命令执行此操作。它将呼叫记录为 curl-H“接受:文本/普通”https://security.sensiolabs.org/check_lock -F lock=@/path/to/composer.lock 我正试图从AWS lambda中执行此操作,其中composer.json位于S3存储桶中。我可以读取bucket并以字符串的形式获取文件的

我试图从node.js AWS lambda向sensiolabs安全api发布一些数据。sensiolabs站点上唯一的文档记录了如何为curl命令执行此操作。它将呼叫记录为
curl-H“接受:文本/普通”https://security.sensiolabs.org/check_lock -F lock=@/path/to/composer.lock

我正试图从AWS lambda中执行此操作,其中composer.json位于S3存储桶中。我可以读取bucket并以字符串的形式获取文件的内容,但是我不知道如何正确地创建node.js请求对象来模拟上面的curl命令。以下是我的最新尝试:

exports.check_lockfile = function(data) {
  var Readable = require('stream').Readable;
  var s = new Readable;
  s.push(data); // the string you want
  s.push(null); // indicates end-of-file basically - the end of the stream

  var promise = new Promise(
    function(resolve, reject) {
      var request = require('request');
      var url = 'https://security.sensiolabs.org/check_lock';

      var req = request.post({
        headers: {
          "Accept": "text/plain"
        },
        url: url
      }, function(err, resp, body) {
        if (err) {
          console.log('Error!');
          reject();
        } else {
          console.log(resp.statusCode);
          console.log('body is ' + body);
          console.log(JSON.stringify(resp));
          resolve();
        }
      });
      var form = req.form();
      form.append('lock', s);
    });
  return promise;
};

但无论我尝试什么,我都会得到格式错误的请求或错误的请求
{“error”:“no lock}

curl-F相当于使用多部分/表单数据上载文件

我修改了代码并运行了它,得到了以下结果: 200 正文是安全报告

代码如下:

var fs = require('fs');
var request = require('request');

var url = 'https://security.sensiolabs.org/check_lock';

var formData = {lock: fs.createReadStream(__dirname + '/composer.lock')};

var req = request.post(
    {
        headers: {
          "Accept": "text/plain",
          "Content-Type": "multipart/form-data"
        },
        url: url,
        formData: formData
    }, function(err, resp, body) 
    {
        if (err) {
          console.log('Error!');
        } else {
          console.log(resp.statusCode);
          console.log('body is ' + body);
          console.log(JSON.stringify(resp));
        }
    }
);
注意:您可能需要更新“composer.lock”文件的路径,在我的测试中,我将其放在包含js文件的同一文件夹中

下面是使用node命令运行上述代码后的屏幕截图: