簡體   English   中英

使用ajax發送數據並且在node.js中沒有實際路由

[英]sending data with ajax and no real route in node.js

我正在使用node / express開發Web應用程序。 我有一個名為validation.js的電子郵件驗證JavaScript文件。 我想做的是,一旦用戶輸入錯誤的電子郵件,就會在電子郵件輸入區域下方顯示一條錯誤消息。 但是它確實沒有這樣做。

validation.js:

var INVALID_EMAIL = "The email you entered is invalid";
var EMPTY_EMAIL = "You did not enter an email";

exports.validateEmail = function (email, callback) {
    console.log("In validate email");
    console.log(email);
    var email = 0;

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

    if (email.length == 0) {
        err = EMPTY_EMAIL;
        callback(err);

    }
    else if (!email.test(emailFilter)){
        err = INVALID_EMAIL;
        callback(err);
    }
}

在app.js中,我添加了路由:

app.post("/validation/email", function(req, res) { validation.validateEmail(req) });

這里/ valiation / email不是真實的視圖。

我的登錄如下:

login.jade:

form(action="")
    key EMAIL
        input(type="text", name="username", id="email")
        br
        span(class="email-error-message")
        br
    key PASSWORD
        input(type="text", name="password", id="password")
        br
        span(class="pw-error-message")
        br
    input(type="submit", name="loginButton", id="login-button", value="LOGIN")

我還沒有實現密碼,所以請忽略它。 但是我有跨度,以便在用戶輸入錯誤消息時輸出錯誤消息。

最后,我在navigation.js中有一個ajax調用:

$('#email').blur(function() {

console.log('inside click function in navigation.js');

$.post('/validation/email', $("#email").val() ,  function(data) {
     console.log('hello got here too');
    $(".email-error-message").html(data);
});
});

當我運行該應用程序時,我收到控制台消息,提示我位於navigation.js中的單擊中,但是當我離開電子郵件輸入區域時,我沒有收到錯誤消息,警告我使用了無效的電子郵件。 我嘗試在任何地方找到答案,但是沒有成功。 我知道這樣做是可行的,但堅持如何做到這一點。

任何幫助都是有用的。

我認為問題出在這條線上。

app.post("/validation/email", function(req, res) { validation.validateEmail(req) });

validateEmail需要一個回調函數,這里沒有一個。

編輯:為了解決此問題,我可能會一起消除回調,因為您實際上並沒有在其中使用回調,而是將錯誤消息發送回客戶端。

這是我可能會做的:

將您定義validateEmail的部分更改為此

exports.validateEmail = function (req,res) {

接着:

var email= req.email  //Or whatever references where the email is in your request

最后:

else if (!email.test(emailFilter)){
    err = INVALID_EMAIL;
    res.send(err);
}

現在,您只需要將req和res傳遞給您的驗證電子郵件功能:

app.post("/validation/email", function(req, res) { validation.validateEmail(req,res) });

與以下內容相同:

    app.post("/validation/email",validation.validateEmail)

因為默認情況下req和res作為參數傳遞。

看來您應該嘗試一下: https : //npmjs.org/package/express-validator

在您的app.js中:

var ev = require('express-validator');

並使用模塊:

app.use(express.urlencoded());
app.use(ev());
// * Order is important.

制作中間件並傳遞錯誤對象:

 function validator(req, res, next) {

    req.checkBody('email', 'Invalid Email').isEmail();
    req.checkBody('password', 'Invalid Password ! Mustbe Between 6-20 Charctersters').len(6, 20);

    var errors = req.validationErrors(true);
    if (errors) {
            res.render('login', { errors: errors});
        }
    } else {
        next();
    }
};

使用此中間件設置路由:

app.post('/login', validator, doLoginStuff);

在Jade模板中,您可以遍歷錯誤對象並從服務器端向客戶端顯示錯誤消息。 在客戶端,您可以根據需要使用任何客戶端驗證工具或Html5表單驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM