我在node.js中为不同的http请求编写了一个简单的restfulapi,然后尝试用lambda函数实现。lambda中delete语句的问题是我不知道如何通过api网关传递id来删除mysql表中的某一行。
对于node.js,我只是通过url的路径(例如/contacts/:id)来定义它,然后用.params.id访问它。如何为同一路由(/contacts)传递一个a值(id),然后在下面的处理程序中使用它来删除具有该特定id的行?
我在下面发布的代码在使用--data在本地调用时可以正常工作,例如:
serverless invoke local --function delete --data "2"
如果我传递testdata{“id”:“1”}并使用event.id而不是event,那么部署lambda也可以使用相同的代码。
我意识到这不是你做这件事的方式,但我终于没有主意了,决定把我的问题贴在这里那么,如何通过api网关将delete-http请求和id传递给/contacts,并在mysql查询中使用它呢?
module.exports.handler = (event, context, callback) =>
{
const mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: ''
});
// Use the connection
connection.query('DELETE FROM sqllambdadb.contacts WHERE id=?', event, function (err, res) {
if (err) throw err;
else if (res.affectedRows>0) callback(err, 'EMail with ID: '+ event+ ' deleted!');
else callback(err, 'No row with ID: '+ event+ ' found!');
});
connection.end();
};
2条答案
按热度按时间xtupzzrd1#
api网关将请求Map到输入事件对象
在您的示例中,根据您使用的segement的别名,您可以通过对适当的事件对象进行分解或通过直接引用来访问id
event.pathParameters.id
```const mysql = require('mysql');
module.exports.handler = (event, context, callback) => {
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: ''
});
//Destructing id from event.pathParameters object
var {id} = event.pathParameters
// Use the connection
connection.query('DELETE FROM sqllambdadb.contacts WHERE id=?', id, function (err, res) {
if (err) throw err;
else if (res.affectedRows>0) callback(err, 'EMail with ID: '+ id + ' deleted!');
else callback(err, 'No row with ID: '+ id + ' found!');
});
connection.end();
};
nwo49xxi2#
因此,我设置了yaml,以便在我的url中添加一个参数值:
通过此配置,id将直接保存在event.id下的event对象中,因此您可以像这样简单地访问它:
您可以通过使用以下输入创建testcase来测试它: