通过node.js传递id以删除mysql中的一行

o4tp2gmn  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(364)

我在node.js中为不同的http请求编写了一个简单的restfulapi,然后尝试用lambda函数实现。lambda中delete语句的问题是我不知道如何通过api网关传递id来删除mysql表中的某一行。
对于node.js,我只是通过url的路径(例如/contacts/:id)来定义它,然后用.params.id访问它。如何为同一路由(/contacts)传递一个a值(id),然后在下面的处理程序中使用它来删除具有该特定id的行?
我在下面发布的代码在使用--data在本地调用时可以正常工作,例如:

  1. serverless invoke local --function delete --data "2"

如果我传递testdata{“id”:“1”}并使用event.id而不是event,那么部署lambda也可以使用相同的代码。
我意识到这不是你做这件事的方式,但我终于没有主意了,决定把我的问题贴在这里那么,如何通过api网关将delete-http请求和id传递给/contacts,并在mysql查询中使用它呢?

  1. module.exports.handler = (event, context, callback) =>
  2. {
  3. const mysql = require('mysql');
  4. var connection = mysql.createConnection({
  5. host: 'localhost',
  6. user: 'root',
  7. password: ''
  8. });
  9. // Use the connection
  10. connection.query('DELETE FROM sqllambdadb.contacts WHERE id=?', event, function (err, res) {
  11. if (err) throw err;
  12. else if (res.affectedRows>0) callback(err, 'EMail with ID: '+ event+ ' deleted!');
  13. else callback(err, 'No row with ID: '+ event+ ' found!');
  14. });
  15. connection.end();
  16. };
xtupzzrd

xtupzzrd1#

api网关将请求Map到输入事件对象

  1. {
  2. "resource": "Resource path",
  3. "path": "Path parameter",
  4. "httpMethod": "Incoming request's method name"
  5. "headers": {Incoming request headers}
  6. "queryStringParameters": {query string parameters }
  7. "pathParameters": {path parameters}
  8. "stageVariables": {Applicable stage variables}
  9. "requestContext": {Request context, including authorizer-returned key-value pairs}
  10. "body": "A JSON string of the request payload."
  11. "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
  12. }

在您的示例中,根据您使用的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();
};

展开查看全部
nwo49xxi

nwo49xxi2#

因此,我设置了yaml,以便在我的url中添加一个参数值:

  1. delete:
  2. handler: src/delete.handler
  3. package:
  4. include:
  5. - node_modules/**
  6. - src/delete.js
  7. - serverlessAPI.iml
  8. events:
  9. - http:
  10. path: contact-management/contacts/{id}
  11. method: delete
  12. cors: true
  13. integration: LAMBDA
  14. request:
  15. parameters:
  16. paths:
  17. id: true

通过此配置,id将直接保存在event.id下的event对象中,因此您可以像这样简单地访问它:

  1. module.exports.handler = (event, context, callback) =>{
  2. const mysql = require('mysql');
  3. var connection = mysql.createConnection({
  4. host: 'localhost',
  5. user: 'root',
  6. password: 'testt123'
  7. });
  8. var id = event.id;
  9. // Use the connection
  10. connection.query('DELETE FROM sqllambdadb.Contacts WHERE id=?', id, function (err, res) {
  11. if (err) throw err;
  12. else if (res.affectedRows>0) callback(err, 'EMail with ID: '+ id + ' deleted!');
  13. else callback(err, 'No row with ID: '+ id + ' found!');
  14. });
  15. connection.end();
  16. };

您可以通过使用以下输入创建testcase来测试它:

  1. {
  2. "id": "$input.params('id')"
  3. }
展开查看全部

相关问题