mongoose - 带有猫鼬的无服务器 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
解决方案
尝试.exec()
在User.create(user)
. 您then
在创建用户后使用,但这是猫鼬then
而不是 Promise。exec
对 mongo 执行查询并返回带有响应的 Promise。使用then
beforeexec
是为了创建复杂的查询。
推荐阅读
- php - google课堂公告创建+php api(资料)
- python - ValueError:张量不是该图的元素
- angular - 如何防止通过角度的父组件单击禁用的按钮?
- c# - 检查文本框不为空
- angular - 拦截器不拦截 http 请求(Angular 6)
- java - 使用 ResultSet 和 HashMap 从一对多数据库关系查询中检索唯一对象列表
- objective-c - ObjectiveC Accessibility API:取消最大化窗口
- javascript - 选中/取消选中复选框时启用/禁用下拉菜单
- java - 通过键在 PriorityQueue 中查找元素
- spring-boot - Jacoco + JUnit 5.0 DynamicTest 不工作