相关疑难解决方法(0)

如何查看Sequelize.js生成的SQL?

我想看看发送到PostgreSQL服务器的SQL命令,因为我需要检查它们是否正确.特别是,我对表创建命令感兴趣.

例如,ActiveRecord(Ruby)将其SQL语句打印到标准输出.这可能与Node.js/ActionHero.js和Sequelize.js一样吗?

node.js sequelize.js

85
推荐指数
4
解决办法
6万
查看次数

sequelize.sync()如何工作,特别是强制选项?

sequelize.sync()上的force选项有什么作用?

sequelize.sync({
    force: true
});
Run Code Online (Sandbox Code Playgroud)

具体来说,我有兴趣知道什么力:假吗?它不会将模式与数据库同步吗?

是否有任何正式的续集文档?我只能在文档中找到示例.

sequelize.js

55
推荐指数
3
解决办法
6万
查看次数

节点退出时没有错误,并且没有等待承诺(事件回调)

我有一个非常奇怪的问题,等待一个已经通过resolve事件 - 发射器回调的Promise 只是退出进程而没有错误.

const {EventEmitter} = require('events');

async function main() {
  console.log("entry");

  let ev = new EventEmitter();

  let task =  new Promise(resolve=>{
    ev.once("next", function(){resolve()}); console.log("added listener");
  });

  await task;

  console.log("exit");
}

main()
.then(()=>console.log("exit"))
.catch(console.log);

process.on("uncaughtException", (e)=>console.log(e));
Run Code Online (Sandbox Code Playgroud)

我期待这个过程在我运行时暂停,因为显然"next"当前从未发出过.但我得到的输出是:

条目
添加了听众

然后nodejs进程正常终止.

我认为这是什么做的垃圾收集器,但evtask显然还是在范围main.所以我真的不知道为什么这个过程完全没有错误地退出.

很显然,我最终发出的事件,但我已经简化我的代码上面的重现.我在node v8.7.0.我的代码有问题还是这个节点错误?

javascript node.js promise

15
推荐指数
1
解决办法
1822
查看次数

如何在 Sequelize 中使用 TypeScript

我已经使用 Fastify 用 Node、PostgreSQL、Sequelize 编写了我的服务器应用程序。

现在我想使用 TypeScript。谁能告诉我如何开始使用 TypeScript 重写我的服务器应用程序。

postgresql node.js sequelize.js typescript fastify

13
推荐指数
2
解决办法
2万
查看次数

当Promise永远无法解决时会发生什么?

我使用es6 async await语法有这个非常令人困惑的代码片段.我期望发生的是该进程await永远挂起,因为从不调用resolve函数.然而,实际发生的是输出"start"然后进程退出而没有更多的输出.

const simple = async () => {
  console.log('start')
  await new Promise(resolve => {})
  console.log('done.')
}
simple()
Run Code Online (Sandbox Code Playgroud)

但是,下面的代码将打印"开始",等待1秒,然后打印"完成".

const simple = async () => {
  console.log('start')
  await new Promise(resolve => setTimeout(resolve, 1000))
  console.log('done.')
}
simple()
Run Code Online (Sandbox Code Playgroud)

我对这意味着什么(没有任何证据)的最接近的猜测是,当节点在等待承诺时,它会跟踪代码中发生的活动事件,当没有其他事情发生时,它就会退出.有人可以解释为什么代码退出这里?

赛跑 node v8.7.0

javascript node.js promise

10
推荐指数
2
解决办法
3186
查看次数

升级 Knex 后出现“获取连接超时”

在我的公司,我们的应用程序在 NodeJS 上运行,并通过多个 EC2 实例和一个 RDS 数据库运行。

我们的应用程序需要一些升级,因为一些依赖项已经很旧了,我们所做的引起我们注意的升级之一是更新我们的数据库库:mysql(从 2.16.0 到 2.17.0)、knex(从 0.12.2 到 0.19 .1) 和书架(0.10.2 至 0.15.1)。

检查更改日志后,不需要更改代码,因此我们很快设法将其上传到我们的临时服务器。

突然,我们的应用程序变得太慢了。加载所有数据需要几秒钟,而我们的主要用户的仪表板在几毫秒内加载到同一台服务器上,需要大约 30 秒。几分钟后,整个应用程序完全没有响应。

为了检查问题是否仅与依赖项升级有关,我们设法将这些降级到工作版本,并且应用程序恢复到正常速度。又升级了,又慢了。

我们已经开始通过 New Relic 分析 RDS 方面是否有问题。什么都没有。没有高峰,没有高 CPU 使用率,没有慢查询或其他任何事情。然后我们来检查连接池,发现适合我们的knex版本使用“generic-pool”,而新版本使用“tarn”。

所以我们开始调试池,发现它被一个指定的查询填满,完全冻结了一段时间,然后开始抛出“TimeoutError: Knex: 获取连接超时。池可能已满”错误。

但是关于填充所有池并冻结的查询最有趣的是它根本不应该生成(并且在使用不存在此问题的过时版本时不会生成)。

在此处输入图片说明

在我们的应用程序中,我们只在两种情况下对联系人表执行 SELECT 请求:

首先,很明显,当用户想要列出他们的联系人时:

let contacts = await Contacts.forge({ 'list_owner': udata.id }).fetchAll()
Run Code Online (Sandbox Code Playgroud)

其次,在检查联系人匹配以判断某些信息是否应该对指定用户可见时,取决于信息所有者的隐私设置:

let checkContact = await Contacts.where({
        list_owner: target_user,
        contact: udata.id
}).fetch()
Run Code Online (Sandbox Code Playgroud)

经过几次 grepping,我可以保证我们的代码库中没有其他地方可以从联系人表中进行 SELECTS。在我们的调试中,我们没有发现未定义的值,并且我们的调查显示查询在之前的代码运行时运行。但是正如您在屏幕截图中看到的,查询 knex 运行没有条件:

select `contacts`.* from `contacts`
Run Code Online (Sandbox Code Playgroud)

我们相信这就是它填满池的原因(因为请求每个用户的联系人是一项相当大的工作),但与此同时,我们看不出为什么 knex 运行这样的查询,如:

  • knex 升级后未进行任何代码更改
  • 使用旧版 knex 时不存在此问题(我们的生产服务器已启动并使用过时的 knex 版本运行)
  • 我们使用 Redis 进行了大量缓存(但无论如何,数据库没有过载并且旧的 …

mysql amazon-rds node.js bookshelf.js knex.js

7
推荐指数
1
解决办法
641
查看次数

Npm安装期间“无法读取未定义的属性'match'”

我在构建Jenkins时遇到错误

詹金斯·洛格(Jenkins Log)

任务:api:processResources任务:api:classes任务:web:nodeSetup任务:web:npmSetup /var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/bin/npm-> / var / lib / jenkins / workspace / hds_v2_docker / web / .gradle / npm / npm-v6.11.2 / lib / node_modules / npm / bin / npm-cli.js / var / lib / jenkins / workspace / hds_v2_docker / web /。 gradle / npm / npm-v6.11.2 / bin / npx-> /var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/lib/node_modules/npm/bin/npx-cli .js + npm@6.11.2在6.837s中添加了832个贡献者的430个软件包任务:web:npmInstall FAILED npm ERR!无法读取未定义的属性“匹配”

npm ERR!可以在以下位置找到该运行的完整日志:npm ERR!
/var/lib/jenkins/.npm/_logs/2019-10-16T01_11_20_594Z-debug.log

失败:构建失败,发生异常。

  • 出了什么问题:任务':web:npmInstall'的执行失败。

    进程'命令'/var/lib/jenkins/workspace/hds_v2_docker/web/.gradle/npm/npm-v6.11.2/bin/npm''完成,返回值非零

  • 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。与--scan一起运行以获取完整的见解。

  • https://help.gradle.org上获得更多帮助

此构建中使用了不推荐使用的Gradle功能,使其与Gradle 6.0不兼容。使用“ --warning-mode all”来显示各个弃用警告。参见 https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

在33秒内失败

/var/lib/jenkins/.npm/_logs/2019-10-16T01_11_20_594Z-debug.log …

node.js npm

2
推荐指数
4
解决办法
215
查看次数