【问题标题】:'then is not a function' in MongoDB Stitch WebhookMongoDB Stitch Webhook 中的“then 不是函数”
【发布时间】:2019-06-28 22:32:29
【问题描述】:

MongoDB Stitch Webhook docs 描述了我的精确用例:使用POST 方法调用insertOne 然后返回插入的_id。

我将下面的示例(直接来自文档)粘贴到缝合功能编辑器中。

exports = function(payload, response) {
  const mongodb = context.services.get("mongodb-atlas");
  const requestLogs = mongodb.db("test").collection("requestlogs");
  requestLogs.insertOne({
    body: EJSON.parse(payload.body.text()),
    query: payload.query
  }).then(result => {
    response.setStatusCode(201);
    response.setBody(result.insertedId);
  })
};

我通过调用在函数编辑器控制台中执行了函数:

exports({query: {arg1: 'hello', arg2: "world!"}, body:BSON.Binary.fromText('{"msg": "world"}')})

返回一个错误,指出.then 不是函数。

错误:TypeError:'then' 不是函数

是文档有误,还是我误入歧途?

【问题讨论】:

  • 你试过return requestLogs.insertOne(...)吗?
  • 感谢您的建议。我刚刚尝试过,并且返回了相同的 TypeError。
  • 对不起,我复制了您的步骤,但无法重现该问题。当我在函数编辑器控制台中使用您的导出时,我确实收到了一个错误,即response 未定义,但我可以通过模拟第二个参数来解决这个问题:exports({query: {arg1: 'hello', arg2: "world!"}, body:BSON.Binary.fromText('{"msg": "world"}')}, {setStatusCode: () => {}, setBody: () => {}})。如果您仍有问题,您还可以在MongoDB community slack#stitch 频道上获得答案。

标签: mongodb mongodb-atlas mongodb-stitch


【解决方案1】:

某些方法,例如.then,会在函数编辑器中引发错误。就我而言,这是函数编辑器的缺点,而不是我的代码中的错误。 使用fetch或Postman调用webhook,函数按预期执行。

Incoming Webhook 文档包含一个特别说明:

如果你想从函数中调试 webhook 函数响应 编辑器,您必须手动提供 HTTP 响应对象,当您 运行函数。

exports( { body: "此文档是 webhook 有效负载" }, new HTTPResponse() )

这提醒了我函数编辑器作为 JS 处理程序的特殊性质。使用Postman 我确认该函数在调用时运行没有错误。函数编辑器生成的错误是一条红鲱鱼。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2016-02-14
    • 2020-03-14
    相关资源
    最近更新 更多