所以我正在做this tutorial,并在步骤 5。它说
为通过Restful API创建访问图书数据的路径var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Book = require('../models/Book.js');
/* GET ALL BOOKS */
router.get('/', function(req, res, next) {
Book.find(function (err, products) {//this is the line I'm having trouble understanding
if (err) return next(err);
res.json(products);
});
});
我不理解的是,如果我正确地阅读了Mongoose.find() documentation,那么在传递回调函数之前,至少需要传递一个“ options”强制性参数。这似乎跳过了必填参数。
教程与文档不一致吗?
我尝试过的事情:
修订文档@ https://github.com/Automattic/mongoose/blob/master/History.md
但是没有提到第一个第一个参数的可选性。
答案 0 :(得分:1)
Mongoose在.find()
中构建一个MongoDB Book.find()
查询,如果您look at Mongoose source,您将看到Model.find
检查{{1 }}是一个函数,如果是,则将该函数作为第1566行中的MongoDB查询构建器的回调传递。
这样,一个空的find
对象将由Mongoose连同回调一起传递给MongoDB conditions
函数,该回调将返回您案例中的所有书籍。
答案 1 :(得分:1)
redraw
是可选的,因此不必强制传递,但是文档中的语句[options]
看起来与实际的The conditions are cast to their respective SchemaTypes before the command is sent.
函数不一致。
.find()
Model.find()
Parameters
conditions «Object»
可选字段,请返回[projection] «Object|String»
Query.prototype.select()
可选,请参阅Query.prototype.setOptions()
[options] «Object»
返回值: «查询» 查找文档在发送命令之前,将条件强制转换为其各自的SchemaType。
要更深入,您可以查看source code.
首先检查
[callback] «Function»
函数的每个参数是否为函数。====>.find()