使用node和Express进行服务器端电子邮件验证

时间:2014-01-16 20:11:49

标签: javascript jquery ajax node.js validation

我正在开发一个网络应用程序,我想在我的服务器端使用javascript进行电子邮件验证,但我对如何构建我的文档以及如何使其全部工作感到困惑。

我正在使用node / Express,我正在使用Jade作为我的模板。我希望我的用户登录页面即在用户点击开箱即可验证电子邮件(使用AJAX调用)。我有一个名为lib的文件夹,其中我有一个validation.js文件,我打算拥有所有验证码。

我还有一个navigation.js文件,我正在使用所有的AJAX调用。

validation.js

function checkEmail(userEmail) {

    var email = userEmail
    var emailFilter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

    if (!emailFilter.test(email.value)) {
    //alert('Please provide a valid email address');
    email.focus;
    return false;
 }
 function checkPassword(userPassword){
    var password = userPassword; 
    var passwordFilter = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/

    if (!passwordFilter.test(password.value)){
        password.focus; 
        return false;
    }
 }

navigation.js

$(document).ready(function() {

    console.log("DOCUMENT IS READY!");

    var viewsWrapper = $("#views-wrapper");
    var loginButton = $("#login-button");
    var registerButton = $("#register-button");

    // Login Link
    // TODO: Unclear if needed
    $("ul li.login").click(function() {
        $.get('/login', function(data) {
            viewsWrapper.html(data);
        });
    });


    // Login Button
    loginButton.click(function(e) {


        // TODO: Input validation needed


        var loginData = { username: $("#username").val(), password: $("#password").val() };

        $( "#username" ).blur(function() {
            if (!checkEmail(username)){
                alert( "Handler for .blur() called." );
            } 
        });
        $( "#username" ).blur(function() {
            if (!checkPassword(password)){
                alert( "Handler for .blur() called." );
            } 
        });

        e.preventDefault();
        $.post('/login', loginData, function(data) {
            $('body').html(data);
        });
    });

..... (Still code after this but not relevant)

我编辑了我的代码,以便我使用下面的评论。它仍然无法正常工作,因为我没有收到警报消息。我打电话时必须这样做:

        if (!checkPassword(username)){
            alert( "Handler for .blur() called." );
        } 

当我这样做时,我是否真的传递了用户名,或者我应该以某种方式使用loginData?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果这是一个HTML 5页面,您可以利用内置的电子邮件验证。 http://www.the-art-of-web.com/html/html5-form-validation/不合时宜,这与您指定的正则表达式不同,但编写电子邮件正则表达式比最初显示的更难。

我还建议您,因为您已经使用javascript编写的验证,您可以在网页本身的javascript中应用相同的验证。这样可以避免引发ajax调用的潜在延迟。

就如何在点击时应用验证而言,您可以使用模糊事件,jQuery提供了一种方便的方法。 http://api.jquery.com/blur/

答案 1 :(得分:0)

您可以在用户使用jQuery焦点或模糊事件点击电子邮件输入框后查看电子邮件:

$('#txtEmail').focusout(function(){
    checkEmail();
});