下面的代码使用node.js和mongoose创建GET路由。在findById函数中,我们使用了带err和foundCampground的回调函数。我将回调函数解释为某种高阶函数,但是如何传递包含其参数的函数呢?执行findById时,传递给回调函数的变量是什么?我之所以这样问是因为err和foundCampground在其他任何地方都没有定义,所以我不知道在执行过程中应该传递给回调函数的内容。
app.get("/campgrounds/:id", function(req, res){
Campground.findById(req.params.id, function(err, foundCampground){
if(err){
console.log(err);
}
res.render("show", {campground: foundCampground});
});
});
答案 0 :(得分:0)
Campground.findById的第二个 参数 的 参数 ,它是err
, foundCampground
在任何地方都没有定义,因为它是...函数定义的 参数 。
如果您不熟悉参数和参数之间的区别。
参数在函数的声明中是变量。 而 Arguments 是传递给该参数的函数的实际值。
例如:
req.headers.body
和function (err, foundCampground){ ... }
是参数。
同时err
和foundCampground
是一个参数。
至于,什么arguments
将传递到err
和foundCampground
中?这将由逻辑Campground.findById
这是一个示例,说明如何编写自己的接受回调的函数
const items = [{ id: 1, name: 'Adam' }, { id: 2, name: 'Ramadoka' }, ];
function findById(searchedId, callback){
// the 2nd argument is a callback function, that we will call
// by passing error (if not found) as the first argument (or null otherwise)
// and the item (if the item is found) as the 2nd argument (or null otherwise)
for (const item of items) {
if(item.id === searchedId) {
return callback(null, item);
}
}
return callback(new Error('not found'), null);
}
// and then you can call it with something like:
findById(2, function (error, item) {
if (error) { console.error(error); }
if (item) { console.log(item); }
});
希望对您有帮助。