[英]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.