【问题标题】:NodeJS - how to break a function?NodeJS - 如何打破一个功能?
【发布时间】:2012-09-21 16:35:51
【问题描述】:

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

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 告诉我所有的中断都是非法的。但是我应该如何以适当的方式打破我的功能呢?它不返回任何东西。谢谢!

【问题讨论】:

    标签: javascript node.js callback return break


    【解决方案1】:

    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 });
            });
        }
    });
    

    【讨论】:

    • 你的意思是像 return null?
    • @IlyaRusanen:return; 应该可以解决问题。不需要提供明确的返回值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2011-06-23
    • 2011-10-17
    • 2018-11-06
    • 2019-12-20
    相关资源
    最近更新 更多