小编Qiu*_*ang的帖子

mongo ObjectID, ObjectId & Mongoose ObjectId 有什么区别

我无法弄清楚 mongo ObjectID 和 ObjectId 之间的区别。文档说ObjectId,但是当我阅读代码时,我看到

import { ObjectID } from 'bson';
Run Code Online (Sandbox Code Playgroud)

让事情更加混乱的是猫鼬文档和代码。猫鼬还说 ObjectId http://mongoosejs.com/docs/api.html#types-objectid-js。但是当我阅读代码时,我看到了

// mongodb.ObjectID does not allow mongoose.Types.ObjectId(id). This is
//   commonly used in mongoose and is found in an example in the docs:
//   http://mongoosejs.com/docs/api.html#aggregate_Aggregate
// constructor exposes static methods of mongodb.ObjectID and ObjectId(id)
type ObjectIdConstructor = typeof mongodb.ObjectID & {
  (s?: string | number): mongodb.ObjectID;
}
Run Code Online (Sandbox Code Playgroud)

那么ObjectID、ObjectId和mongoose ObjectId到底有什么区别呢?

我发现还有另一个 SO 在谈论这个 BSON::ObjectId vs Mongo::ObjectID

那里的链接虽然已经死了,但并没有涉及猫鼬。所以我希望我的问题不会被标记为重复。

mongoose mongodb node.js

9
推荐指数
1
解决办法
2066
查看次数

如何让git从分支而不是标签中拉出?

我们的 repo 恰好有一个与分支名称同名的标签。因此,当我尝试从该分支中​​拉取时,git 感到困惑并从标记中拉出,就像这样。我必须先删除那个标签才能让我的 git pull 工作。

那么我如何告诉 git pull from branch 而不是 tag 呢?

cc-backend ? git pull origin 0.9.0-rc6-patch1                                       
From 10.0.0.28:webcc/cc-backend
 * tag                 0.9.0-rc6-patch1 -> FETCH_HEAD
Already up to date.

/* I have to delete that tag and git pull again to get the result I want */

cc-backend ? git pull origin 0.9.0-rc6-patch1                                       
From 10.0.0.28:webcc/cc-backend
 * branch              0.9.0-rc6-patch1 -> FETCH_HEAD
Updating 9d7e9dc3..2bf3f96a
Fast-forward
 app/Services/GroupSeat/Seat.php | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
Run Code Online (Sandbox Code Playgroud)

git git-pull

9
推荐指数
1
解决办法
1448
查看次数

vscode“转到定义”可以显示node_modules中的实际js代码而不是typescript版本吗?

假设我想查看expressjs代码,但是当我单击var express = require('express')“转到定义”时,vscode将向我显示打字稿版本,而不是node_mudules.

我在这里搜索相关问题,例如如何在 VS Code 中查看原始 javscript 库源代码而不是 typescript 版本?或 github 中的相关问题,例如支持位于“node_modules”中的代码的“转到定义”。但我仍然不知道这是否可以做到。该问题已于 2016 年关闭,有人说

这是打字稿大脑的问题

这到底是什么意思?到底能不能做?

- - - 更新 - - -

发现它实际上是重复的,就像这样How can I go toimplementation of Something 而不是 TypeScript 声明?

Go to source definition是我需要的。

node.js node-modules typescript visual-studio-code

8
推荐指数
0
解决办法
1747
查看次数

重新使用NSPredicate替换新的变量

我可以重用NSPredicate来替换新的变量吗?我的NSPredicate相当简单:

NSPredicate *userPredicate = [NSPredicate predicateWithFormat:@"id == %@",userID];
Run Code Online (Sandbox Code Playgroud)

userID是在运行时生成的,具有不同的值,现在对于我需要创建NSPredicate的每个userID.那么我可以重用我的NSPredicate吗?

cocoa core-data nspredicate

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

如何使用 docker-compose.debug.yml 调试在 docker 中运行的节点?

我已经使用vs docker 扩展来创建 docker 文件。但我不知道使用 docker-compose.debug.yml 调试我的代码的“正确”方法是什么,例如我如何设置我的环境。所以我可以按 F5 并且所有的魔法都会发生。

我确实找到了一种调试代码的方法。首先docker-compose -f docker-compose.debug.yml在终端运行。然后使用来自容器内节点开发:Visual Studio Code的 launch.json附加到我在 docker中的节点

但我认为 Code 可能会提供一种更简单的方法来简化调试过程。

remote-debugging node.js docker visual-studio-code

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

我对 debounce axios 请求的实现使承诺永远处于挂起状态,有没有更好的方法?

我需要一个简单的 debounce 函数,立即数总是为真。
没有求助于 lodash 并在有人可以解释 Javascript 中的“去抖动”功能的帮助下,我实现了它如下,

function debounce(func, wait) {
    var timeout;
    return function() {
        if (!timeout) func.apply(this, arguments);
        clearTimeout(timeout);
        timeout = setTimeout(()=>{timeout = null}, wait);
    };
};
Run Code Online (Sandbox Code Playgroud)

它按预期工作,直到我需要去抖动 axios 请求。假设我有一个去抖动的 axios 方法,我希望调用方法像往常一样,这意味着我的去抖动 axios 方法应该返回我相信的承诺。

   //the calling method should not change   
   debounced_axios().then(res => {...}).catch(err => {...}) 
Run Code Online (Sandbox Code Playgroud)

原始 debounce 实现的本质是在等待时间范围内只运行一次func ,但是我如何在等待时间范围内只返回一个承诺?

然后我想出了以下解决方案

all_timers = {}
function debounce_axios(input, wait) {
    return new Promise((resolve, reject) => {
        let timer = all_timers.[input] //check if it is …
Run Code Online (Sandbox Code Playgroud)

javascript promise debouncing es6-promise axios

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

当任何承诺已经实现时,是否有可能脱离 await Promise.all (Chrome 80)

我需要向多服务器发送请求,以查看哪个服务器将响应我的请求,如果其中任何一个响应,我将进一步与该服务器交互。最简单的方法是按顺序发送我的请求,像这样

async function probing(servers) {
    for (const server of servers) {
        const result = await fetch(server)
        if (result.status == 200) {
            return result
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我希望加快探测过程,所以我将代码更改为

async function probing(servers) {
    results = await Promise.all(
        servers.map(async server => {
            return await fetch(server)
        })
    )
    for (const result of results) {
        if (result.status == 200) return result
    }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然需要等待所有的承诺完成。我真正需要的是,如果其中一个有决心,我就从我的探测中返回()

那有可能吗?

- - 更新 - -

感谢评论promise.any是解决方案(单线箭头函数可以进一步简化如下)

result = await Promise.any(
    servers.map(server => fetch(server))
)
Run Code Online (Sandbox Code Playgroud)

---- 更新 …

javascript google-chrome promise async-await polyfills

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

问号在公共init中是什么意思?(编码器aDecoder:NSCoder)?

我认为问号中的public init?(coder aDecoder: NSCoder)意思不是可选的。另外,当我覆盖它时,我发现根本不需要写问号。

那到底是什么意思呢?

-更新-

下面的评论帮助我弄清楚了它被称为“失败的初始化程序”,另一个使该概念更易于理解的示例是UIFont的自发init,因为UIFont可能不存在。

public /*not inherited*/ init?(name fontName: String, size fontSize: CGFloat)
Run Code Online (Sandbox Code Playgroud)

uiview nscoder swift

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

为什么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
查看次数

使用supervisord代替pm2来管理nodejs进程

我们目前使用 pm2 来保持 Nodejs 进程的活动,我们不使用集群模式(以及相关的负载平衡功能)。

正如laravel 建议的那样,我们的 php 团队使用supervisord 来管理他们的 php 进程。现在我们正在研究使用supervisord 来管理我们的nodejs 进程的可能性。我们主要需要流程管理器做两件事:保持流程处于活动状态并在流程崩溃和重新启动时记录事件。

在保持进程存活方面,我确实发现 pm2 和supervisord 有一些相似之处。但是pm2有更多的重启策略,例如pm2有一个CRON时间,而supervisord没有(如果我错了请纠正我)。如果没有 cron time 功能,我们将不得不求助于 cronjob,因此这是一个很好的功能,但不是必须的。

Supervisord进程组优先级顺序,根据我使用节点的经验,我没有找到很多用例。

所以对我们来说,这似乎是可行的,但是我们没有足够的supervisord经验,我们担心我们可能会在这里错过一些东西,特别是像你这样的大佬一开始就不应该这样做!以前有人这样做过吗?

顺便说一句,我的问题与在虚拟环境中使用 node.js pm2 运行 python 脚本相反

- - 更新 - -

最近我又被问到这个问题。

这对我来说不是优先事项,所以我没有进一步调查这个问题。但是因为我在 pm2 中没有使用集群,所以我绝对认为这是可行的,请查看这篇文章使用supervisor永远运行NodeJs应用程序,supervisor conf文件应该如下所示,

[program:start_script]
command=/var/www/nodeapp/start.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/start.err.log
stdout_logfile=/var/log/start.out.log
Run Code Online (Sandbox Code Playgroud)

process-management node.js supervisord pm2

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