范围和传递 Express/JavaScript - 如何传递数据库变量? [复制]

Posted

技术标签:

【中文标题】范围和传递 Express/JavaScript - 如何传递数据库变量? [复制]【英文标题】:Scopes and Passing in Express/JavaScript - How do I pass database variable? [duplicate] 【发布时间】:2019-09-04 20:33:00 【问题描述】:

我正在尝试设置一个动态注册页面,该页面通过获取 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 文件的范围,因为它是一个单独的文件。有没有办法传递变量或给它一个更大的范围,以便所有文件都可以访问它?还是我这样做完全不正确?

【问题讨论】:

【参考方案1】:

您正在尝试从客户端 javascript 执行服务器端 nodejs 代码。不幸的是,您不能直接这样做。您需要设置一些 REST API 或类似的东西来调用 express 代码。

您可以让您的客户调用一个端点,例如/user?email=myemail@company.com

然后让 REST 服务侦听对 GET /user 的调用,然后您就可以在其中执行 User.findOne() 并以结果进行响应

【讨论】:

好吧,这对我来说很有意义。我仍然在思考什么是服务器端、什么是客户端以及限制。我可以假设我的 express 文件中的所有内容都是严格的服务器端代码吗? 是的,快递是服务器端。在客户端整理用户输入/数据,并使用 HTTP 向服务器端 API 发送/接收数据 在线查看“带有 Mongoose 的 Node Rest API”的示例,那里有很多

以上是关于范围和传递 Express/JavaScript - 如何传递数据库变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Maven 的依赖范围和传递

将范围传递给回调函数/绑定

Excel VBA函数:如何传递范围、转换为数组、反转和返回数组

函数/变量范围(通过值或引用传递?)

Bazel Maven迁移传递依赖范围

maven依赖管理(依赖配置依赖传递依赖冲突依赖范围)