范围和传入 Express/JavaScript - 如何传递数据库变量?
Scopes and Passing in Express/JavaScript - How do I pass database variable?
我正在尝试设置一个动态注册页面,通过获取 keyUp 上的电子邮件值并通过 Mongoose 对照 MongoDB 检查帐户是否存在。
这是 Pug 页面:
html
include head.pug
script
include ../register.js
include navbar.pug
body
form(action = "/register", method = "POST")
div.form
p#pnotice
label(for = "firstname") First Name
br
input(name = "firstname")
br
br
label(for = "lastname") Last Name
br
input(name = "lastname")
br
br
label(for = "email") E-Mail
br
input#email(name = "email")
br
br
label(for = "password") Password
br
input#pass1(name = "password" type = "password")
br
br
label(for = "passwordc") Password Confirmation
br
input#pass2(name = "passwordc" type = "password")
br
br
button(type = "submit") Register
然后是注册码,有密码校验功能运行可以,但是User.findOne()功能根本不起作用:
$(document).ready(function() {
$('#pass2').keyup(function() {
let p1 = $('#pass1').val();
let p2 = $('#pass2').val();
if (p1 !== p2) {
$('#pnotice').show();
$('#pnotice').text('Password Must Match');
} else {
$('#pnotice').hide();
}
});
$('#email').keyup(function() {
//alert($('#email').val());
let query = $('#email').val();
User.findOne({email: query}, function(err, res) {
if (res) {
console.log("FOUND");
} else {
console.log("NOT FOUND");
}
});
})
});
这是我的 Express 中的相关代码:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
var userSchema = mongoose.Schema({
firstname: String,
lastname: String,
email: String,
password: {
type: String,
required: true,
bcrypt: true
},
teacher: String,
time: Number
});
var User = mongoose.model("User", userSchema);
我真的很陌生,所以我想我犯了一个新手错误,但我假设 User 变量超出了 register.js 文件的范围,因为它是一个单独的文件。有没有办法传递变量或给它一个更大的范围,以便所有文件都可以访问它?还是我这样做完全不正确?
您正在尝试从客户端 JavaScript 执行服务器端 nodejs 代码。不幸的是你不能直接这样做。您将需要设置一些 REST API 或类似的东西来调用 express 代码。
您可以让您的客户端调用端点,例如 /user?email=myemail@company.com
然后让 REST 服务侦听对 GET /user
的调用,然后就是您执行 User.findOne()
并响应结果
的地方
我正在尝试设置一个动态注册页面,通过获取 keyUp 上的电子邮件值并通过 Mongoose 对照 MongoDB 检查帐户是否存在。
这是 Pug 页面:
html
include head.pug
script
include ../register.js
include navbar.pug
body
form(action = "/register", method = "POST")
div.form
p#pnotice
label(for = "firstname") First Name
br
input(name = "firstname")
br
br
label(for = "lastname") Last Name
br
input(name = "lastname")
br
br
label(for = "email") E-Mail
br
input#email(name = "email")
br
br
label(for = "password") Password
br
input#pass1(name = "password" type = "password")
br
br
label(for = "passwordc") Password Confirmation
br
input#pass2(name = "passwordc" type = "password")
br
br
button(type = "submit") Register
然后是注册码,有密码校验功能运行可以,但是User.findOne()功能根本不起作用:
$(document).ready(function() {
$('#pass2').keyup(function() {
let p1 = $('#pass1').val();
let p2 = $('#pass2').val();
if (p1 !== p2) {
$('#pnotice').show();
$('#pnotice').text('Password Must Match');
} else {
$('#pnotice').hide();
}
});
$('#email').keyup(function() {
//alert($('#email').val());
let query = $('#email').val();
User.findOne({email: query}, function(err, res) {
if (res) {
console.log("FOUND");
} else {
console.log("NOT FOUND");
}
});
})
});
这是我的 Express 中的相关代码:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
var userSchema = mongoose.Schema({
firstname: String,
lastname: String,
email: String,
password: {
type: String,
required: true,
bcrypt: true
},
teacher: String,
time: Number
});
var User = mongoose.model("User", userSchema);
我真的很陌生,所以我想我犯了一个新手错误,但我假设 User 变量超出了 register.js 文件的范围,因为它是一个单独的文件。有没有办法传递变量或给它一个更大的范围,以便所有文件都可以访问它?还是我这样做完全不正确?
您正在尝试从客户端 JavaScript 执行服务器端 nodejs 代码。不幸的是你不能直接这样做。您将需要设置一些 REST API 或类似的东西来调用 express 代码。
您可以让您的客户端调用端点,例如 /user?email=myemail@company.com
然后让 REST 服务侦听对 GET /user
的调用,然后就是您执行 User.findOne()
并响应结果