我在这里搜索过这个问题,但作为初学者,答案有点复杂,有点超出了我的理解范围。我正在使用 bcrypt 来散列密码,并设置了我的架构,以允许我使用中间件来查看用户是否在散列密码之前修改密码(无论是在初始创建还是更新时)。
在后路由上没有问题,但如果我使用补丁路由,就会出现问题,并且我的中间件不会运行。
有人可以帮助我以更简单的方式(即简单的英语)理解为什么它绕过猫鼬吗?:
const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true })
Run Code Online (Sandbox Code Playgroud)
但这是有效的:
const user = await User.findById(req.params.id)
updates.forEach((update) => user[update] = req.body[update])
await user.save()
Run Code Online (Sandbox Code Playgroud) 因此,我正在学习promise,并且为了演示promise,讲师首先从传统的回调示例开始。但是,我对他使用的语法以及似乎从中出现了一些额外参数的语法感到有些困惑。
我正在寻找的是一个愚蠢的解释,可以帮助我解决问题。这些是我的具体问题:
在下面的代码的第一行中,是“回调”和参数吗?它是函数的名称吗?或者是别的什么?
在第三和第四行,我了解我们要传递的内容(错误或结果),但是由于我们在任何地方都没有定义两个参数,所以我不了解这两个参数的来源。程序如何知道这还可以并且不会引发错误?
但是,我不需要了解何时调用该函数的帮助,因为我知道,这只是定义我困惑的函数中的一些内容。我认为这可能是使我失望的箭头语法。
我尝试过反复搜索和重新观看视频,但仍无法掌握最新情况。
const doWorkCallback = (callback) => {
setTimeout(() => {
// callback('This is my error', undefined)
callback(undefined, [1, 4, 7])
}, 2000)
}
doWorkCallback((error, result) => {
if(error) {
return console.log(error)
}
console.log(result)
})
Run Code Online (Sandbox Code Playgroud)
预先感谢大家的帮助。