首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用knex和无服务器脱机时连接获取的问题

使用knex和无服务器脱机时连接获取的问题
EN

Stack Overflow用户
提问于 2022-06-20 06:48:12
回答 1查看 295关注 0票数 1

设置

我正在构建一个使用网站前端的无服务器应用程序。网站向API发送查询,API连接到数据库。基础设施是托管在AWS上的,但我遇到的问题只影响了本地的发展。此设置的一个关键组件是无服务器API,它对每个API路由使用Lambdas。为了确保存在到数据库的连接,在执行处理程序之前,我连接到数据库并将该连接传递给ORM,并且为了确保在完成查询后没有空闲连接,我在处理程序完成后(无论是错误的还是优雅的)销毁它们。就实现而言,这些背后的逻辑是合理的。

堆栈

我正在使用Serverless离线插件运行Serverless,以便在本地开发Node 14应用程序。数据库是Postgres实例,我使用Objection.JS作为ORM连接到它。在引擎盖下,对象使用Knex管理连接、处理查询楼等。

版本

所用软件的版本。

(2.1.0)

  • objection (3.0.1)

  • serverless (2.55.0)

  • serverless-offline (8.7.0)

问题

我遇到的问题是,当使用无服务器脱机在本地运行安装时,连接不可用。尽管在处理程序开始时连接到数据库,但有时API查询会抛出一个错误,说明无法获得连接,或者查询没有可用的数据库。这是间歇性的,有时相同的API调用执行时没有任何问题。

我已经意识到,只有在同时执行多个API查询时才会发生这种情况,尽管这一次并不总是这样。

伪码

无服务器离线中的lambda处理程序如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports.handler = async function() {
  const connection = await connectToDatabase();
  await ORM.databaseConnection.setup(connection);

  // ...

  const results = ORM.executeQuery();

  // ...

  await ORM.databaseConnection.destroy();
  return results;
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-20 06:48:12

我花了很长时间才终于找到这个问题的根源,主要是因为它只会偶尔发生(当多个处理程序在本地运行时)。

我已经意识到,这些数据库连接导致错误(无法获得连接,无法执行查询)的原因是,无服务器脱机在共享进程中执行lambda处理程序,这意味着:

由一个lambda函数获得的由 ORM存储的Objection.JS连接将持久化到另一个在本地同时执行的lambda函数(这很好),但是当其中一个lambda破坏了它的连接时,第二个lambda就会失去它的连接,这意味着它将没有连接来执行针对的查询。

解决方案

当运行无服务器脱机时,这个问题的解决方案是将lambda处理程序作为单独的进程运行。这将导致每个处理程序的执行在不影响其他执行的情况下对自己的连接具有自主权。这可以通过向无服务器脱机命令中添加以下标志来实现:--useChildProcesses,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverless-offline --useChildProcesses
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72688902

复制
相关文章
[系统安全] 四十.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
该系列文章将系统整理和深入学习系统安全、逆向分析和恶意代码检测,文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。漫漫长征路,偏向虎山行。享受过程,一起加油~
Eastmount
2023/02/28
8.9K0
[系统安全] 四十.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
利用powershell 生成sqlserver 对象脚本
首先,创建一个server 对象实例,然后连接它。我只需要引入Script() 方法,脚本如下:
用户1217611
2022/05/06
9170
使用管道符在PowerShell中进行各种数据操作
最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下。
深蓝studyzy
2022/06/16
2.3K0
关于go的只读管道只写管道以及单向管道的理解
上面的例子,writeChan只能对ch变量进行写操作,readChan只能对ch变量进行读操作,这样造成很多同学对管道理解就有了只读和只写管道了,其实管道都是双向的,默认双向可读写,只是管道在函数参数传递时可以使用操作符限制管道的读写,就如上面的例子。
公众号-利志分享
2022/04/25
1K0
PowerShell系列(七)PowerShell当中的Provider介绍
今天给大家讲解PowerShell当中的非常重要的概念Provider相关的知识,希望对大家能有所帮助!
小明互联网技术分享社区
2023/09/26
3920
PowerShell系列(七)PowerShell当中的Provider介绍
图片加载失败的正确处理[通俗易懂]
对于这样一段代码来讲,如果该图片加载成功,那么界面上会显示图片,如果由于一些原因导致图片加载失败,会出现这样的图标。
全栈程序员站长
2022/08/23
2.4K0
图片加载失败的正确处理[通俗易懂]
Flutter SDK变更后的正确处理方式
网上有些方法用了未必有效。比如有说直接修改项目中的.packages文件,改完后可能还会有问题。
IT晴天
2020/02/18
2.3K0
Node中POST请求的正确处理方式
Node的 http 模块只对HTTP报文的头部进行了解析,然后触发 request 事件。如果请求中还带有内容部分(如 POST 请求,它具有报头和内容),内容部分需要用户自行接收和解析。
Qiang
2019/06/20
2K0
Node中POST请求的正确处理方式
在 JavaScript 正确处理变量
变量无处不在。即便我们写一个小函数或一个小工具,也要声明、赋值和读取变量。增强对变量的重视,可以提高代码的可读性和可维护性。
疯狂的技术宅
2020/12/31
6110
PowerShell系列(二):PowerShell和Python之间的差异介绍
今天给大家聊聊PowerShell和Python之间有哪些共同之处,各自有哪些优势,希望对运维的朋友了解两种语言能提供一些有用的信息。
小明互联网技术分享社区
2023/09/20
6270
PowerShell系列(二):PowerShell和Python之间的差异介绍
前端正确处理“文字溢出”的思路
然而当用户缩放浏览器显示的尺寸时,我们需要做到省略中间的文字,选择保留后缀这种方案。如下图所示:
@超人
2023/05/12
7630
前端正确处理“文字溢出”的思路
PowerShell的开源实现
从Mono老大的blog上Open Source Powershell Implementation 看到了一个PowerShell的开源实现的项目Pash。目前可以运行的平台包括Linux, Mac
张善友
2018/01/31
6900
PowerShell的开源实现
正确处理 CSV 文件的引号和逗号
CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便。
仁扬
2023/07/02
1.2K0
Powershell中的变量
在我们的迷你系列“Variables in Shells”中,了解如何在PowerShell中处理局部变量。
QRosie
2019/11/24
3K0
Powershell中的变量
PowerShell系列(三):PowerShell发展历程梳理
Windows Server 2003 SP1/SP2,Windows Server2003 R2, Windows XP SP2, and Windows Vista
小明互联网技术分享社区
2023/09/21
4610
PowerShell系列(三):PowerShell发展历程梳理
PowerShell revshells
PowerShell revshells 在提示符和工作目录上方显示 username@computer 有部分 AMSI-bypass,使一些事情更容易 TCP 和 UDP Windows Powershell 和核心 Powershell 上传和下载文件的功能。(使用sc0tfree的 Updog) ngrok 支持 ngrok 可以从脚本内部启动/停止 有效载荷将与 ngrok 地址一起生成 更新支持 您可以从脚本内部启动/停止 Updog PowerShell revshells 嵌入了上传/下
Khan安全团队
2023/02/23
1.4K0
PowerShell revshells
Redis的管道Pipeline
文章目录 1. Redis的管道(Pipeline) 1.1. 为什么使用管道 1.2. 客户端使用管道执行命令 1.2.1. API Redis的管道(Pipeline) 为什么使用管道 其中redis的执行一条命令可以分为四个步骤 发送命令 命令排队 命令执行 返回结果 其中1-4之间所需要的时间称为往返时间(RTT) Redis提供了批量操作命令(例如mget、mset等),有效地节约RTT。但 大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有 mhgetall命令存在,需要
爱撒谎的男孩
2019/12/31
1.6K0
Shell中的管道
管道 管道,从一头进去,从另一头出来。 在Shell中,管道将一个程序的标准输出作为另一个程序的标准输入,就像用一根管子将一个程序的输出连接到另一个程序的输入一样。 管道的符号是|,下面的程序将cat的标准输出作为less的标准输入,以实现翻页的功能: $ cat source.list.bk | less tee 有时候我们想要同时将程序的输出显示在屏幕上(或进入管道)和保存到文件中,这个时候可以使用tee。 tee程序的输出和它的输入一样,但是会将输入内容额外的保存到文件中: $ cat hello.t
mwangblog
2018/07/04
9100
Dart 编码规范:正确处理 null
在 Dart 编码中,我们会经常遇到需要处理 null 的场合。Dart 2.12版本引入 null safety 以后,对 null 的处理有了新的规范。关于 null safety 特性,可以阅读本人的另一篇文章:升级踩坑,聊聊 Dart 的 null safety,本篇介绍如何正确处理 null。
玖柒的小窝
2021/11/21
1.3K0
Dart 编码规范:正确处理 null
Windows PowerShell:(
  Cmdlets 用于服务器的管理方面主要体现在4个方面:服务、日志、进程、服务器管理器。
py3study
2020/01/07
3.1K0

相似问题

使用knex和无服务器脱机时连接获取的问题

16

onActivityResult resultCode在使用照相机时总是0

10

在lambda上,无服务器函数总是超时

22

使用无服务器在lambda上部署代码失败

20

LibGit2Sharp无响应性

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文