首页 > 解决方案 > 带有猫鼬的无服务器 Lambda Promise 不起作用.. 没有向客户端返回响应

问题描述

我正在尝试构建一个无服务器应用程序,但应用程序没有按预期工作。让我承认,我是这个领域的新手。而且我不想使用回调,但想使用 Promise 来实现相同的功能。

问题:响应没有按预期返回,它是未定义的。我想获取 APIResponse 对象作为对 api 调用的返回。

注意:我确定我做错了什么。需要建议来解决同样的问题。

我的数据库连接

  
module.exports = connectToDatabase = async () => {
 
  console.log('=> using  database connection' + isConnected);

  if (isConnected) {
    console.log('=> using existing database connection');
    return Promise.resolve();
  }

  

  try {
    console.log('=> using new database connection : ' + dbConfig.url);
    await mongoose.connect(dbConfig.url, { useNewUrlParser: true, useUnifiedTopology: true }).then (db => {
      isConnected = db.connections[0].readyState;
      console.log( "is conencted >>" + isConnected);
      return Promise.resolve();
    });

  }
  catch (error) {
    return Promise.reject();
  }

};

我的控制器

 const registerUser = (body) => {

    let user = new User({
        userId: helper.encode(body.userid),
        email: helper.encode(body.email),
        phoneno: helper.encode(body.phoneno)
    })

    return new Promise((resolve, reject) => {
        connectToDatabase()
            .then(() => {
                User.create(user)
                    .then(user => {
                        console.log(" User " + user)
                        resolve(
                            ApiResponse({
                                success: true,
                                responseObj: user
                            })
                        )
                    });
            })
            .catch(err => {
                reject(
                    ApiResponse({
                        success: false,
                        responseObj: err
                    })
                )
            });
    });
 

}

我的 API 描述

 module.exports.registeruser = (event, context) => {

  context.callbackWaitsForEmptyEventLoop = false;

  let body = JSON.parse(event.body)
 
  register.registerUser(body).then (obj => {
    console.log(" Object "+obj)
    return obj
  }) 
   
};

如果我执行它,这会停留在下面,并且没有响应返回给客户端

=> using  database connectionfalse
=> using new database connection : mongodb+srv://conenct string
is conencted >>1
 User {
  _id: 5f2e5314ebafa83b514604b0,
  userId: 'YWpveXNpbmhh',
  email: 'YWpveS5zaW5oYUBsaXZlLmNvbQ==',
  phoneno: 'OTY3NDQ5MzMxMg==',
  createdAt: 2020-08-08T07:24:05.614Z,
  updatedAt: 2020-08-08T07:24:05.614Z
}
 Object undefined

标签: mongooselambdapromiseserverless

解决方案


尝试.exec()User.create(user). 您then在创建用户后使用,但这是猫鼬then而不是 Promise。exec对 mongo 执行查询并返回带有响应的 Promise。使用thenbeforeexec是为了创建复杂的查询。


推荐阅读