代码:
const knex = require('knex')({
client: 'mysql',
connection: {
host: process.env.database_host,
user: process.env.database_user,
password: process.env.database_pass,
database: process.env.database_db,
charset: 'utf8'
}
});
const bcrypt = require('bcrypt');
const bookshelf = require('bookshelf')(knex);
const User = bookshelf.Model.extend({
tableName: 'users'
});
const checkValues = (values) => {
// todo: add data validation
return true;
};
exports.test = (database) => {
// todo: add tests
};
exports.handler = (event, context, callback) => {
let salt = bcrypt.genSaltSync();
let values = {
first_name: event.firstname,
last_name: event.lastname,
username: event.username,
date_of_birth: event.birthday,
password: bcrypt.hashSync(event.password, salt),
password_salt: salt
};
if (!checkValues(values)) {
callback(null, {
success: false,
error: {
id: 2,
details: 'data validation error'
}
});
context.done(null, "User not created");
return;
}
try {
new User({
'first_name': values.first_name,
'last_name': values.last_name,
'username': values.username,
'date_of_birth': values.date_of_birth,
'password': values.password,
'password_salt': values.password_salt
}).save();
callback(null, {
success: true
});
context.done(null, "User created");
} catch (err) {
console.log(err);
callback(null, {
success: false,
error: {
id: 1,
details: 'error inserting user into database'
}
});
context.done(null, "User not created");
}
};
我正在尝试使用AWS API Gateway和Lambda函数创建一个基本注册api端点,但每次我将信息发布到api网关时都会收到错误
{
"errorMessage": "2017-09-07T08:38:50.174Z f2368466-93a7-11e7-b4bc-01142a109ede Task timed out after 10.00 seconds"
}
我尝试过使用不同的数据库,但我似乎总是遇到同样的问题。数据库连接工作原理我知道这一点,因为用户确实将数据库中的users表添加到了并且密码已成功散列。
我也尝试过使用异步bcrypt,但它对结果没有任何影响,它仍然会这样做但是说它超时了。
Lambda似乎没有正确终止,有些东西让这个过程继续运行,我无法弄清楚什么,有什么想法?
答案 0 :(得分:1)
我有类似的问题,使用API网关调用我的lambda。
API网关的默认超时为30秒。如果你的反应在30秒内没有准备就绪,你将会超时,尽管你的lambda仍会运行!
因此可能会尝试在30秒内恢复响应。如果没有从API调用一个lambda并立即返回响应,让第一个lambda调用你的第二个lambda,那将运行最多5分钟的时间。
由于