我一直在尝试为我正在创建的网站实现登录功能。我能够检查用户是否在数据库中。但是,如果用户不在数据库中,我想以表格形式显示消息; “找不到用户。”我正在尝试使用jQuery,但我不断收到“文档未定义”错误。
我的js文件中的代码如下:
router.post('/login', function(req, res) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err) }
if (!user) {
req.flash('error', info.message);
$(document).ready(function() {
$("#label1").text("Hello world!");
$("#label1").css('color', 'red');
});
return res.redirect('/nouser')//called when no user found. to implement
}
req.logIn(user, function(err) {
if (err) { return next(err); }
res.redirect(req.session.returnTo || '/');
});
})(req, res);
});
我的表格是:
<!-- Username & Password Login form -->
<div class="user_login">
<form id="login" action="/auth/login" method="post">
<label id="label1">Email</label>
<input name="email" type="email" />
<br />
<label>Password</label>
<input name="password" type="password" />
<br />
<div class="action_btns">
<div class="one_half"><a href="#" class="btn back_btn"><i class="fa fa-angle-double-left"></i> Back</a></div>
<input type="submit" class="btn btn_red" value="login">
</div>
</form>
<a href="#" class="forgot_password">Forgot password?</a>
</div>
我对网络编程非常陌生,任何帮助都会非常受欢迎。 感谢。
答案 0 :(得分:1)
“未定义JavaScript引用错误” 如前所述,有时简单地定义变量将解决问题。例如,给定上面的jQuery示例,我们可以调用noConflict()来恢复变量。
在jQuery初始化期间保存$的旧引用; noConflict()只是简单地恢复它们。
但这超出了本文的范围。
问题是,简单地恢复变量或给它一个定义,特别是当它与第三方依赖相关时并不那么容易。
相反,问题通常可以通过两种方式解决。
要解决这个问题,通常是乱序加载文件的问题,如果在具有自己的库的站点或Web应用程序的上下文中抛出错误,则尤其如此,那么脚本可能是加载时间晚于您自己。
这意味着将脚本放在页面的head元素之后,或者将它们加载到页面的页脚中。如果是这种情况,大多数框架和应用程序都提供了一个API,用于设置加载文件的顺序,设置依赖关系,然后定义页面中加载文件的位置。
例如,假设我们知道有问题的函数将在页面生命周期的两个点调用:
当DOM准备就绪时,可能还没有定义因变量 页面加载并准备就绪时,可能已经定义了因变量。 为此,我们可以通过执行以下操作来利用JavaScript中的变量定义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function acmeReferenceError(valueExists){ &#39;使用严格的&#39;;
if(undefined === valueExists){
/* If this is hit, then the function is being invoked
* before the variable in question has been defined.
*/
}其他{
/* If this particular conditional is hit, then the function
* is being invoked after the value in question has
* been defined.
*/
}
} 查看由GitHub使用❤托管的rawreference-error-not-defined.js 但请注意,我们不会检查变量是真还是假,而是实际定义了变量。
鉴于此,我们可以设置条件,以便在存在变量的情况下完成需要完成的任何工作。
最后,你调用以下函数的方式是这样的:
假设您在定义值acmeReferenceError();之前调用该函数。 如果在定义值后调用函数,则调用acmeReferenceError(foo);其中foo是定义的值。 最有可能的是,第一种情况将在DOM加载时调用,但页面尚未就绪,第二种情况将在页面完全加载并准备就绪时调用。
第一个是最优的,第二个是最优的 在使用JavaScript时,以依赖顺序加载脚本总是更好的主意。话虽如此,我总是建议第一个选项是正确的,更优的。
它不仅可以按照脚本的排序方式工作,而且需要更少的文档和基于JavaScript的代码,因为应用程序层脚本的顺序显示 - 和控制 - 确切地说是如何工作的。
然而,可能有几次不可能或环境问题无法为您提供所需的控制,如果是这种情况,那么第二种选择是可行的解决方案。
但是,如果您最终走上这条路线,我强烈建议在功能级别包含非常清晰的代码注释,以解释可选参数的用途,原因以及应用程序的哪些方面需要执行此操作类似的东西。