小编Qiu*_*ang的帖子

等待 Promise.reject 或抛出错误来摆脱困境?

我正在将我的承诺链接代码重构为异步/等待风格。这样做的原因之一是我想要一个 catch 块来处理所有错误情况(如此处所述Understanding Promise Rejection in Node.js

我的问题是,当我遇到同步错误时,我应该致电await Promise.reject还是throw error退出该过程?我知道这两种方式都可以,但我更喜欢throw error。我已经知道我得到的结果无效,为什么还要等待?使用 throw 立即终止控制流似乎是更好的选择。

我不是在谈论承诺链(我的问题的全部要点),所以我不认为线程JavaScript Promises -reject vs. throw回答了我的问题。

我读过《Node.js 中的错误处理》一文,我认为它也没有给出答案。但它确实说了

给定的函数应该同步(使用 throw)或异步(使用回调或事件发射器)传递操作错误,但不能同时传递。...一般来说,使用 throw 并期望调用者使用 try/catch 的情况非常罕见...

我的异步函数可能会返回 Promise.reject。因此,我关心的是介绍两种传递错误的方法,正如该文章所反对的那样。

try {
   let result = await aysncFunc().
   if (!isResultValid(result)) { //isResultValid() is sync function 
      await Promise.reject('invalid result')
      //or throw 'invalid result'
   }
   ... //further processing
}
catch (error) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise async-await

6
推荐指数
1
解决办法
5851
查看次数

为什么sqlite fts5 Unicode61 Tokenizer不支持CJK(中文日文韩文)?

我原以为Unicode61 Tokenizer可以支持 CJK --中文 日语 韩语\n我验证我的 sqlite 支持 fts5

\n\n
sqlite> pragma compile_options;\nBUG_COMPATIBLE_20160819\nCOMPILER=clang-9.0.0\nDEFAULT_CACHE_SIZE=2000\nDEFAULT_CKPTFULLFSYNC\nDEFAULT_JOURNAL_SIZE_LIMIT=32768\nDEFAULT_PAGE_SIZE=4096\nDEFAULT_SYNCHRONOUS=2\nDEFAULT_WAL_SYNCHRONOUS=1\nENABLE_API_ARMOR\nENABLE_COLUMN_METADATA\nENABLE_DBSTAT_VTAB\nENABLE_FTS3\nENABLE_FTS3_PARENTHESIS\nENABLE_FTS3_TOKENIZER\nENABLE_FTS4\nENABLE_FTS5\n
Run Code Online (Sandbox Code Playgroud)\n\n

但令我惊讶的是它根本找不到任何中日韩单词。这是为什么 ?

\n\n
sqlite> CREATE VIRTUAL TABLE ft5_test USING fts5(content, tokenize = \'porter unicode61 remove_diacritics 1\');\nsqlite> INSERT INTO ft5_test values(\'\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe6\x94\xaf\xe6\x8c\x81\xe4\xb8\xad\xe6\x96\x87 fts5 does not seem to work for chinese\');\nsqlite> select * from ft5_test where ft5_test = \'\xe4\xb8\xad\xe6\x96\x87\';\nsqlite>\nsqlite> select * from ft5_test where ft5_test = \'Chinese\';\n\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe6\x94\xaf\xe6\x8c\x81\xe4\xb8\xad\xe6\x96\x87 fts5 does not seem to work for chinese\n
Run Code Online (Sandbox Code Playgroud)\n\n

- - - - - - - 更新 - …

sqlite unicode full-text-search fts5

6
推荐指数
0
解决办法
1431
查看次数

iOS设备可以使用http直播将音频/视频发送回服务器吗?

因此,http直播可让您将实时视频发送到iOS设备,但iOS设备如何将实时音频/视频发送回服务器?他们也可以使用http直播吗?例如,对于像webex或facetime这样的视频会议应用,iOS设备如何将音频/视频发送回服务器?

当然有iOS API让你打电话应用程序,但我想在幕后发生什么,特别是可以用HLS发送流回服务器?

谢谢!

http-live-streaming ios

5
推荐指数
1
解决办法
3111
查看次数

如何使粘性会话与socket.io(不带pm2或不带pm2)一起工作?

尽管socket.io文档说“ 粘性会话 ”可以使socket.io与节点群集一起工作。我只是无法使其工作。

我找到了PM2几个问题开了反对的话,最接近的解决方案,我能找到的是这个,“力只使用websock选项”,在所有不使用粘性会话。

有没有人有过使节点群集与socket.io兼容的经验?

-------更新--------

我检查了这里提到的其他两个粘性会话实现,sticky-session与socket.io-sticky-session节点js库!哪个更好?,找到“粘性群集”即可完成工作。

我学到的另一个教训是,粘性会话不适用于pm2集群,例如,从https://github.com/uqee/sticky-cluster/issues/26进行确认。因此,在使用socket.io时,请勿使用pm2集群模式(或仅使用“ websocket”传输)。

socket.io文档中提到的“粘性会话”实现实际上也可以工作。如果有人需要有关代码示例的更多说明,请在此处检查https://github.com/elad/node-cluster-socket.io

我的问题待解决,因为我仍然想看看是否还有其他输入。

node.js socket.io pm2 sticky-session

5
推荐指数
1
解决办法
969
查看次数

是否可以同时使用Winston日志记录和调试模块?

我使用Winston日志记录是因为我使用了它的功能,例如不同的日志记录级别,多种传输方式等。

但我也喜欢debug的命名空间功能。此外,express已在使用它。那么是否可以将它们一起使用,例如让Winston Logging具有名称空间?

logging node.js express winston

5
推荐指数
1
解决办法
1767
查看次数

为什么在 docker-compose.yml 中使用标签,环境不能完成这项工作?

我现在正在学习docker。我想弄清楚Docker 标签可以解决什么样的问题。

我可以理解为什么在 Dockerfile 中使用 label,例如添加与构建相关的元数据,但我仍然不明白为什么在 docker-compose.yml 中使用它?使用标签与环境有什么区别?我假设会有不同的用例,但我就是想不通。

有人能给我一些实际的例子吗?

谢谢

docker dockerfile docker-compose

5
推荐指数
1
解决办法
1741
查看次数

当那些 javascript 前端构建工具说“编译”我的 js 代码时,它们是什么意思?

我看到那些javascript前端构建工具,例如webpack,时不时地使用“编译”这个词。我不确定编译 javascript 代码到底意味着什么,至少不像编译 c/c++ 代码。

我想我总体上理解“构建”过程,比如将所有 js 代码捆绑到一个大文件中,缩小/丑化代码,使用 babel 转换 ES6 语法(transpile)。但是编译在这里意味着什么,它如何适应整个构建过程,或者它只是整个构建过程的另一个名称?

目前,我认为这可能只是使用 Babel 转换 ES6 语法的另一个名称。

附言。读完这篇文章后,SO Babel 是编译器还是转译器?我相信我的问题与此不一样。因为它不仅仅与巴布尔有关。例如,webpack 还使用术语编译器https://webpack.js.org/api/compiler/ 我不明白它的含义

Browserify 也使用编译器,例如https://github.com/robrichard/browserify-compile-templates “在 browserify 转换中将 HTML 脚本标签中的下划线模板编译为 CommonJS”

javascript frontend webpack babeljs

5
推荐指数
1
解决办法
1236
查看次数

是否可以从 gitlab 私有存储库子文件夹安装 npm 模块?

对于初学者来说,我的问题与从 gitlab 私有存储库安装 npm 模块不同

我们维护自己的 npm 模块,每个模块都在自己的子文件夹中,并一起组成一个存储库,例如 my_node_modules.git,那么是否可以从中安装单个 npm 模块,即是否有一个我可以使用的命令/工具

npm i -S git+ssh://git@mydomain/path/my_node_modules.git/ A_module /
npm i -S git+ssh://git@mydomain/path/my_node_modules.git/ B_module /

如果不是,我必须安装那个单独的私有模块还有什么其他解决方案?

- - 更新 - -

经过一些研究后,我发现我并不孤单。
所以 npm 反对,https://github.com/npm/npm/issues/2974
纱线正在考虑,https://github.com/yarnpkg/yarn/issues/4725

我真的不喜欢这里的想法npm install package from github repo subfolderpostinstall sript

我正在考虑使用 git 子树。我在这里留下我的问题,看看是否有人可以提出一些想法。

git node.js npm gitlab

5
推荐指数
1
解决办法
1525
查看次数

docker中npm start启动node应用程序的问题

我阅读了一些Docker 和 Node.js 最佳实践文章,例如https://github.com/nodejs/docker-node/blob/main/docs/BestPractices.md使用 Docker 容器化 Node.js Web 应用程序的 10 个最佳实践,或者Node 和 NPM 的 Dockerfile 良好实践。所有这些文章至少是在 2021 年写或更新的,我不列出 2021 年之前写的文章,但也有不少。

\n

他们都反对CMD ["npm", "run", "start"]。主要原因是 npm 会吞掉SIGTERM 和 SIGINT 等退出信号,因此我的节点应用程序中的正常关闭代码将无法运行。

\n

我猜旧的 npm 就是这种情况(虽然我没有测试它),但我已经测试了 node14+npm6 和 node16+npm8,我可以验证 npm6/8 不会吞下这些事件和我的优雅关闭代码正在运行。不确定这是否是因为 npm 修复了它。

\n

因此,唯一的问题仍然是还有 1 个进程 npm 需要运行,即 NPM 作为PID 1运行。一些文章说问题是“PID 1 不会响应 SIGINT”,但据我证实,情况并非如此。

\n

许多文章(例如这个nodejs文档)建议只是,CMD [ "node", "server.js" ]但也在https://github.com/nodejs/docker-node/blob/main/docs/BestPractices.md#handling-kernel-signals …

signals node.js npm docker alpine-linux

5
推荐指数
1
解决办法
2135
查看次数

swift 2中引入的可选模式的优点/用例有哪些?

对于简单的情况,if let或者guard我没有看到优势,

if case let x? = someOptional where ... {
  ...
}

//I don't see the advantage over the original if let

if let x = someOptional where ... {
  ...
}
Run Code Online (Sandbox Code Playgroud)

对于for-case-let简化使用可选集合的情况,我真的希望swift可以更进一步:

for case let x? in optionalArray {
  ...
}

//Wouldn't it be better if we could just write

for let x? in optionalArray {
  ...
}
Run Code Online (Sandbox Code Playgroud)

谷歌一段时间之后我认为唯一有用的案例是" Swift 2模式匹配:解开多个选项 ":

switch (username, password) {
case let (username?, password?):
    print("Success!")
case …
Run Code Online (Sandbox Code Playgroud)

pattern-matching switch-statement optional swift swift2

4
推荐指数
1
解决办法
295
查看次数