关于《Node.js开发指南》的两个问题
发布于 8 年前 作者 StudentWan 3204 次浏览 来自 问答

最近在学习BYVoid大神的开发指南,有两处代码不是很清楚,希望各位大神指教。 第一处:

Post.prototype.save = function save(callback) {
    // 存入 Mongodb 的文档
    var post = {
        user: this.user,
        post: this.post,
        time: this.time
    };
    mongodb.open(function(err, db) {
        if(err) {
            return callback(err);
        }
        // 读取 posts 集合
        db.collection('posts', function(err, collection) {
            if(err) {
                mongodb.close();
                return callback(err);
            }
            // 为 user 属性添加索引
            collection.ensureIndex('user');
            // 写入 post 文档
            collection.insert(post, {safe:true}, function(err, post) {
                mongodb.close();
		   callback(err,post);
            });
        });
    });
}

调用的callback有两个参数,可是实现Post.prototype.save的callback并没有两个参数,不知道这个callback到底是调用的什么东西?

第二处:

<% if (user) { %>
    <%- partial('say') %>
<% } %>
<%- partial('posts') %>

书上本来说partial这个函数要传两个参数,第一个代表模板,第二个代表对象或数组,可是这里为什么只穿了一个模板名称的参数,在调用时还确实取到了希望取到的posts数据呢。。找了很久没找到partial的文档,希望大神指教

最后谢谢好心的大神~

7 回复

求解答啊各位大神T^T

光看这些不明白,有代码地址吗?

你的第一个问题, 两个调用的都是同一个 callback, JavaScript 对函数接受的参数不做检查的。第二个的话,调用 partial 时传入的数据优先,但是 partial 可以访问主视图的本地变量。 另外你用的教程版本太低啦,换成置顶的教程学吧。另外 git 设置一下,不要把 node_modules 的文件也传上去了。

@IchiNiNiIchi 謝謝大神🙏。第一個問題我懂了,第二個還是有點迷糊,是說partial在只接受到一個參數時,這個參數首先是數據,然後填充的視圖在本地文件中找嗎?

@StudentWan 第二个就是你可以只传递模板名称,不传递数据。像你在这里可以访问 user 数据,你在 say 跟 posts 模板里面也可以得到 user 的数据。你可以试一下

	<% if (user) { %>
    	<%- partial('say') %>
	<% } %>
	<%- partial('posts') %>

@IchiNiNiIchi 懂了,谢谢大神!

回到顶部