代码:
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 functions创建基本注册API端点,但是每次我将信息发布到api网关时都会收到错误消息
{
"errorMessage": "2017-09-07T08:38:50.174Z f2368466-93a7-11e7-b4bc-01142a109ede Task timed out after 10.00 seconds"
}我尝试过使用不同的数据库库,但似乎总是遇到相同的问题。数据库连接可以工作我知道这一点,因为用户实际上被添加到数据库中的users表中,并且密码被成功地散列。
我也试过使用异步bcrypt,但它对结果没有任何影响,它仍然有效,但显示超时。
Lambda似乎没有正确终止,有什么东西让进程仍然在运行,我不知道是什么,有什么想法吗?
发布于 2017-09-08 03:08:43
我在使用API网关调用我的lambda时遇到了类似的问题。
API网关默认超时时间为30秒。如果您的响应在30秒内没有准备好,您将超时,但您的lambda仍将运行!
因此可能会尝试在30秒内返回响应。如果没有,从API调用一个lambda并立即返回响应,让第一个lambda调用您的第二个lambda,这将运行到最大时间,即5分钟。
谢谢
https://stackoverflow.com/questions/46091820
复制相似问题