[英]How does this callback call work in Node.js with mongo .find call
模型/category.js
var mongoose = require('mongoose');
// Category Schema
var categorySchema = mongoose.Schema({
title: {
type: String
},
description: {
type: String
},
created_at: {
type: Date,
default: Date.now
}
});
var Category = module.exports = mongoose.model('Category', categorySchema);
// Get Categories
module.exports.getCategories = function(callback, limit) {
Category.find(callback).limit(limit).sort([['title', 'ascending']]);
}
路线/categories.js
var express = require('express');
var router = express.Router();
Category = require('../models/category.js');
router.get('/', function(req, res, next) {
Category.getCategories(function(err, categories) {
if (err) res.send(err);
res.render('categories',
{
title: 'Categories',
categories: categories
});
});
});
router.post('/add', function(req,res) {
res.send('Form Submitted');
});
module.exports = router;
我对此代码有一些疑问
a)当我们将该回调函数传递给Category.find(callback)中的models / category.js时,回调机制如何从route / categories.js工作。 对我来说,这很奇怪,因为我们正在做一个完整的res.render,它成为Category.find()的一部分?
b)在哪里指定极限?
c)为什么在Category = require('../ models / category.js')前面没有var;
a)确实会发生,并且很好:在数据库上执行find()
操作并且将结果发送回给猫鼬代码返回之前,不会调用res.render
。 您想在获得查询结果之后运行回调函数,因此在之前调用res.render
会更加奇怪。
b)在文档中。 http://mongoosejs.com/docs/api.html#model_Model.find产生一个Query对象,该对象可以是同步的 (即,在实际查询要在数据库上解析之前),进一步用where
, limit
等指定。
c)因为有人偷懒。 在此示例中,它实际上并没有什么不同,因为没有var
(或在现代JS中为const
或let
),变量声明会附加到本地上下文中,该上下文在您的文件中是routes/categories.js
模块上下文,并且因为Categories
在该范围的顶部声明, var
不会更改变量最终绑定的位置。 但这是懒惰的,并且对于良好的示例代码, 应该在其前面加上var
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.