《node与express开发》第9章关于构造函数的一段代码不解
发布于 7 年前 作者 Ako520 2987 次浏览 来自 问答

这是一个表单提交的处理

//这里的构造函数不太懂
function NewsletterSignup(){
}
//这里也是 不知道他们使干什么用的 为什么要用
NewsletterSignup.prototype.save = function(cb){
    cb();
};

var VALID_EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;
//邮箱验证`

app.post('/newsletter', function(req, res){
    var name = req.body.name || '', email = req.body.email || '';
    // 输入验证
    if(!email.match(VALID_EMAIL_REGEX)) {
        if(req.xhr) return res.json({ error: '有错误' });
        req.session.flash = {
  			一些返回错误的信息
        };
        return res.redirect(303, '/newsletter/archive');
    }
	//  new NewsletterSignup({ name: name, email: email }) 为什么要传这个对象进去?
	// .save(回调函数)这个回调函数就是上面构造函数里的cb吗?
    new NewsletterSignup({ name: name, email: email }).save(function(err){
        if(err) {
            if(req.xhr) return res.json({ error: 'Database error.' });
            req.session.flash = {
                返回数据库错了的信息
            }
            return res.redirect(303, '/newsletter/archive');
        }
        if(req.xhr) return res.json({ success: true });
        req.session.flash = {
           返回提交的是正确的信息
        };
        return res.redirect(303, '/newsletter/archive');
    });
});
6 回复

这实际上是javascript中的东西,javascript中类的实现有基于prototype(原型)方式,你可以看下js中类的实现方式

@Aoqin new NewsletterSignup({ name: name, email: email }).save(这里是回调); 回调函数不是会自己直接就执行吗? 那么NewsletterSignup.prototype.save = function(cb){ cb(); }; 这个cd() 又有什么用呢?

cd()//是执行函数,save=function(cb){}//这是一个声明函数,cb传的是function(){} 所以save()执行时才会执行cb();

@Aoqin 了解了~ (づ ̄ 3 ̄)づ

同学,基础堪忧…推荐《Javascript高级程序设计》

上面的回答都很到位,我就不献丑了

回到顶部