2012-09-30 59 views
2

最近有一个类似的问题,但仍然无法得到它。我必须在添加新用户之前验证注册页面。NodeJS - 如何打破功能?

app.post('/signup', function(req, res) { 
    //checking if first name is filled 
    if (req.body.first_name = "" || req.body.first_name = null || req.body.first_name = undefined) { 
     res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : "empty_first_name" }); 
     break; 
    } 
    //checking if last name is filled 
    if (req.body.last_name = "" || req.body.last_name = null || req.body.last_name = undefined) { 
     res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : "empty_last_name" }); 
     break; 
    } 
    //checking if email is filled 
    if (req.body.email = "" || req.body.email = null || req.body.email = undefined) { 
     res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : "empty_email" }); 
     break; 
    } 
    //checking if passwords match 
    if (req.body.password != req.body.repassword) { 
     res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : "pass_missmatch" }); 
     break; 
    } 
    ... 
    ... 
    ... 
    //and finally if everything seems to be OK... 
    addUser(req.body.email, req.body.password, req.body.first_name, req.body.last_name, req.body.country, function(status) { 
     res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "success" : 1 }); 
    }); 
}); 

Node.JS告诉我所有的休息都是非法的。但是,我应该如何以适当的方式打破我的功能?它不会返回任何东西。谢谢!

回答

12

A return语句用于暂停函数。

您可以提供一个可选的返回值,但在这种情况下,我相信它会被忽略,所以您应该可以将break;替换为return;


侧面说明,但你必须重复码好一点,你必须在你的if条件下作业。你通常可以将重复因素排除在外。另外,如果您使用if/else if/else语句,则可以完全清除return

下面是一个例子。

function isEmpty(val) { 
    return val === "" || val == null; 
} 

function renderWithError(req, res, msg) { 
    res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : msg }); 
} 

app.post('/signup', function(req, res) { 
    if (isEmpty(req.body.first_name)) { 
     renderWithError(req, res, "empty_first_name"); 
    } 
    else if (isEmpty(req.body.last_name)) { 
     renderWithError(req, res, "empty_last_name"); 
    } 
    else if (isEmpty(req.body.email)) { 
     renderWithError(req, res, "empty_email"); 
    } 
    else if (req.body.password != req.body.repassword) { 
     renderWithError(req, res, "pass_missmatch"); 
    } 
    ... 
    ... 
    ... 
    else { 
     addUser(req.body.email, req.body.password, req.body.first_name, req.body.last_name, req.body.country, function(status) { 
      res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "success" : 1 }); 
     }); 
    } 
}); 

+0

你的意思是像水木清华返回NULL? – f1nn

+0

@IlyaRusanen:只是'回来;'应该做的伎俩。没有要求提供明确的返回值。 –

+0

它的工作,谢谢! – f1nn