node.js - 无服务器框架不能使用promise?
问题描述
我正在尝试使用无服务器框架制作 REST api。
有些函数是异步的。
所以我正在使用Promise
.
但承诺不起作用(没有回应)
所以,我使用await
关键字。它工作正常。
我认为这是不好的方式。如何在无服务器框架中使用 Promise?
任何意见或建议将不胜感激。先感谢您。
解决方案
我现在正在为 mysql 世界数据库编写一个 serverless-kubeless api。我昨天不得不解决这个问题。我得出了以下解决方案。它的功能不完整。但你没有要求那个。因此,这是一个有效的 GET 端点,它接受各种查询参数来自定义查询。
'use strict';
const pool = require('./database');
module.exports.handler = async (event, context) => new Promise((resolve, reject) => {
let request = event.extensions.request;
let response = event.extensions.response;
try{
let handleResults = (err, results, fields) => {
if(err){
response.status(500).send({
success: false,
message: err.message,
});
}else{
response.status(200).send({
success: true,
count: results.length,
data: results,
});
}
}
if(typeof(request.query.id) !== "undefined"){
// search for a specific region by id
if (Number.isNaN(Number(request.query.id))) {
response.status(500).send({
success: false,
message: "id query param was not a number",
});
}
pool.query("select id,name,code,country_id from regions where id = ?", [request.query.id], handleResults);
}else if(typeof(request.query.country) !== "undefined"){
// search for a region list from a specific country
if (Number.isNaN(Number(request.query.country))) {
response.status(500).send({
success: false,
message: "country query param was not a number",
});
}
pool.query("select id,name,code,country_id from regions where country_id = ?", [request.query.country], handleResults);
}else{
response.status(400).send({
success: false,
message: "Could not find country, or region query parameter. Require a search term"
});
}
}catch(exception){
response.status(500).send({
success: false,
message: exception.message
});
}
});
和 database.js:
const mysql = require("mysql");
const util = require('util');
const pool = mysql.createPool({
connectionLimit: 10,
host: process.env.DATABASE_HOSTNAME,
user: process.env.DATABASE_USERNAME,
port: process.env.DATABASE_PORT,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
});
pool.getConnection((err, connection) => {
if (err) {
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
console.error('Database connection was closed.');
}
if (err.code === 'ER_CON_COUNT_ERROR') {
console.error('Database has too many connections.');
}
if (err.code === 'ECONNREFUSED') {
console.error('Database connection was refused.');
}
}
if (connection) connection.release();
return;
});
// Magic happens here.
pool.query = util.promisify(pool.query);
module.exports = pool;
推荐阅读
- reporting-services - SSRS 颜色表达式未更新
- pycharm - PyCharm 不允许我更改终端中的行距
- jquery - JSON 使用 Ajax 分页获取数据
- javascript - 如何计算状态数组中出现的频率
- php - WooCommerce:获取订单退款的日期
- c++ - 运行单元测试,不包括 Catch2 中的特定标签
- python - Jupyter notebook 输出指针
- google-cloud-dataflow - 工作人员启动后数据流作业未运行?
- javascript - 什么是正确的运算符 < 或 &&
- python - 在 SIGSEGV 之后处理芹菜中的 WorkerLostError