小编Jes*_*est的帖子

在 AWS Lambda 中接收和发送多部分/表单数据文件

我正在尝试对multipart/form-dataAWS lambda 函数执行包含 pdf 文件的 POST,对文件进行一些检查,然后将文件 POST 到外部 API。

我使用带有 node.js 的无服务器框架和aws-lambda-multipart-parser插件来接收文件。

从客户端到 lambda 的文件上传工作正常,我可以将缓冲区内容打印到控制台。不起作用的部分是将文件转发到外部 API。

这是我当前的 axios 设置,用于向外部 API 发出 POST 请求:

const formData = new FormData();
formData.append("file", file.content, file.filename);

const res = await axios.post(`https://external-api.com`, formData, {
  headers: { ...formData.getHeaders(), "Access-Control-Allow-Origin": "*" },
  params: {
    someParams: foo
  }
});
Run Code Online (Sandbox Code Playgroud)

file.content实际上包含一个包含文件内容的 Buffer,但是当我发出请求时,外部 API 返回错误并且请求失败...

有趣的是,当我在本地运行无服务器功能时,整个设置有效sls offline。这可能表明 API 网关设置存在问题。

一些附加信息:

根据多部分插件的说明,我在 API 网关设置中添加了二进制数据类型:

在此输入图像描述

这是 AWS Gateway 中终端节点的配置:

在此输入图像描述

我也尝试了这个SO问题AWS文档,但它们只介绍了如何接收二进制文件,而不是如何发送二进制文件。 …

amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless

7
推荐指数
1
解决办法
9254
查看次数

在 forEach 循环中等待 promise

我正在从数据库中收到一份作为 Promise 的书籍清单。

如果成功加载了初始书籍列表,则通过将它们传递给实用程序函数来进一步处理这些书籍。

实用程序函数内部是一个 forEach 循环,它循环遍历每本初始书籍,进行异步调用以获取附加信息,创建一个新书籍对象并将其添加到新书籍数组(称为updatedBooks)。

问题:我不知道如何等到 forEach 循环完成每本书以及如何返回新书数组。

目前,我只有一本更新的书,而不是全部

我的最终目标是在res.json()对象中有更新书籍的列表

这是我目前的结构

controller.find(req.query)
    .then(function (entities) {
        awsUtil.addInfo(entities)
            .then(function (updatedBooks) {
                res.json({
                    confirmation: "success",
                    result: updatedBooks
                })
            })
            .catch(function (err) {
                res.json({
                    confirmation: "fail",
                    message: err
                })
            })
    })
    .catch(function (err) {
        res.json({
            confirmation: "fail",
            message: err
        })
    })
Run Code Online (Sandbox Code Playgroud)

从 MongoDB 获取初始书籍的函数

find: function (params) {
    return new Promise(function (resolve, reject) {
        Book.find(params, function (err, books) {
            if (err) {
                reject(err)
                return
            }

            console.log("Org. Books List: …
Run Code Online (Sandbox Code Playgroud)

javascript arrays loops asynchronous promise

6
推荐指数
1
解决办法
4883
查看次数

猫鼬:如果为空,则忽略查询中的参数

我有一个简单的REST API,我想在特定端点上实现过滤。

想象一下,我有一个这样的端点:

localhost:5000/api/items?color="red"
Run Code Online (Sandbox Code Playgroud)

哪个处理这样的请求:

const items = await Items.find({color: req.query.color})
Run Code Online (Sandbox Code Playgroud)

color存在该参数时,此方法有效。但是,如果color省略该参数,则查询将搜索coloris 为的项目undefined。这不是我所需要的行为。

就我而言,我想添加多个过滤器参数,如果它们不存在,将被忽略。我是否必须为每种情况创建一个单独的查询,或者是否可以告诉Mongoose color如果该字段为null或未定义,则不要搜索该字段(在这种情况下)?

rest mongoose mongodb node.js express

2
推荐指数
3
解决办法
2457
查看次数