Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要内部功能<;脚本>;node.js_Javascript_Node.js_Handlebars.js_Mongoose Schema - Fatal编程技术网

Javascript 需要内部功能<;脚本>;node.js

Javascript 需要内部功能<;脚本>;node.js,javascript,node.js,handlebars.js,mongoose-schema,Javascript,Node.js,Handlebars.js,Mongoose Schema,我是否可以在脚本标记中放置require函数,例如: <script> var User = require('../models/user'); alert('It is working'); </script> 编辑: 我编辑我的问题,因为我真正想要的是当我点击按钮,它将更新我的数据库。这是我的全部代码 在我的路线上->users.js var mongoose = require('mongoose'); var bcrypt = require(

我是否可以在脚本标记中放置require函数,例如:

<script>
    var User = require('../models/user');
    alert('It is working');
</script>
编辑: 我编辑我的问题,因为我真正想要的是当我点击按钮,它将更新我的数据库。这是我的全部代码

在我的路线上->users.js

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');

//User Schema
var UserSchema = mongoose.Schema({
username:{
    type: String,
    index:true
},
password:{
    type:String
},
email:{
    type:String
},
name:{
    type:String
},
field:{
    type:String
},
e_money:{
    type:Number //this is the integer form in mongoose
}
});

//accesible variable from the outside
var User = module.exports = mongoose.model('User', UserSchema);

//create the user
module.exports.createUser= function(newUser, callback){
bcrypt.genSalt(10, function(err,salt){
bcrypt.hash(newUser.password, salt, function(err, hash){
    //store hash in your password DB
    newUser.password = hash;
    newUser.save(callback);
});
});
}



module.exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
}

module.exports.getUserById = function(id, callback){
User.findById(id, callback);
}

module.exports.comparePassword = function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, function(err, isMatch){
    if(err) throw err;
    callback(null, isMatch);
});
}
//To run the application
var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

var User = require('../models/user');

//Register
router.get('/register', function(req,res){
res.render('register');
});

//Login
router.get('/login',function(req,res){
res.render('login');
});

//Register User
router.post('/register', function(req,res){
var name = req.body.name;
var email = req.body.email;
var username = req.body.username;
var password = req.body.password;
var password2 = req.body.password2;
var field = req.body.field;

//temporary for emoney
var e_money = req.body.e_money;

//show what's been written in web to console(name)
//console.log(name);

//validation - Check to see if the field is empty
req.checkBody('name', 'Name is required!').notEmpty();
req.checkBody('email', 'Email is required!').notEmpty();
req.checkBody('email', 'Email is not valid!').isEmail();
req.checkBody('username', 'Username is required!').notEmpty();
req.checkBody('password', 'Password is required!').notEmpty();
req.checkBody('password2', 'Password does not match').equals(req.body.password);
req.checkBody('field', 'Please specify if you are a Teacher or a Student!').notEmpty();

//temporary for emoney
req.checkBody('e_money','Please add some value in this field').notEmpty();

var errors = req.validationErrors();

if(errors){
    res.render('register',{
        errors:errors
    });
}else{
        //new user in the model(user.js)
    var newUser = new User({
        name: name,
        email: email,
        username: username,
        password: password,
        field: field,
        e_money: e_money //temporary emoney
    });

    User.createUser(newUser,function(err, user){
        if(err) throw err;
        console.log(user);
    });
    req.flash('success_msg', 'You are registed and can now login');

    res.redirect('/users/login');
}
});




passport.use(new LocalStrategy(
function(username, password, done){
User.getUserByUsername(username, function(err, user){
    if(err) throw err;
    if(!user){
        return done(null, false, {message: 'Unknown User'});
    }

    User.comparePassword(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
            return done(null, user);
        }
        else{
            return done(null, false, {message: "Invalid password"});
        }
    });
});
}));

passport.serializeUser(function(user, done){
done(null, user.id);
});

passport.deserializeUser(function(id, done){
User.getUserById(id, function(err, user){
    done(err,user);
});
});

router.post('/login',
passport.authenticate('local',{sucessRedirect:'/',failureRedirect:'/users/login',failureFlash: true}),
function(req,res){
    //dashboard
    if (req.user.field == "student") {
        req.flash('stud_val', 'student');
    }else if(req.user.field == "teacher"){
        req.flash('teach_val', 'teacher');
    }else if (req.user.field == "admin") {
        req.flash('admin_val', 'teacher');
    }
    res.redirect('/');
});

router.get('/logout',function(req, res){
req.logout();
req.flash('success_msg', 'You are logged out');

res.redirect('/users/login');
})


module.exports = router;
<!DOCTYPE html>
<html>
<head>
{{#if user}}
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<title>PEKTOS | Live Stream</title>
<!-- Favicon-->
<link rel="icon" href="favicon.ico" type="image/x-icon">
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css?family=Roboto:400,700&subset=latin,cyrillic-ext" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" type="text/css">
<!-- Bootstrap Core Css -->
<link href="plugins/bootstrap/css/bootstrap.css" rel="stylesheet">
<!-- Waves Effect Css -->
<link href="plugins/node-waves/waves.css" rel="stylesheet" />
<!-- Animation Css -->
<link href="plugins/animate-css/animate.css" rel="stylesheet" />
<!-- Morris Chart Css-->
<link href="plugins/morrisjs/morris.css" rel="stylesheet" />
<!-- Custom Css -->
<link href="css/style.css" rel="stylesheet">
<!-- AdminBSB Themes. You can choose a theme from css/themes instead of get all themes -->
<link href="css/themes/all-themes.css" rel="stylesheet" />

<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="/easyrtc/easyrtc.js"></script>
<script type="text/javascript" src="/easyrtc/labs/easyrtc_recorder.js">    </script>
{{#if stud_val}}
    <script type="text/javascript" src="js/demo_multistream_stud.js"></script>
{{/if}}
{{#if teach_val}}
    <script type="text/javascript" src="/easyrtc/labs/desktop_capture_iframe_version.js"></script>
    <script type="text/javascript" src="js/demo_multistream.js"></script>
{{/if}}
<!-- <script type="text/javascript" src="js/demo_instant_messaging_rooms.js"></script> -->

<!-- for button -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.js"></script>
<script type="text/javascript" src="prettify/prettify.js"></script>
<script type="text/javascript" src="js/jquery.slimscroll.js"></script>



{{else}}
  <meta charset="UTF-8">
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <title>Pektos | Log in</title>
  <!-- Favicon-->
  <link rel="icon" href="/favicon.ico" type="image/x-icon">
  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css?family=Roboto:400,700&subset=latin,cyrillic-ext" rel="stylesheet" type="text/css">
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" type="text/css">

    <!-- Bootstrap Select Css -->
    <link href="plugins/bootstrap-select/css/bootstrap-select.css" rel="stylesheet" />

  <!-- Bootstrap Core Css -->
  <link href="/plugins/bootstrap/css/bootstrap.css" rel="stylesheet">

  <!-- Waves Effect Css -->
  <link href="/plugins/node-waves/waves.css" rel="stylesheet" />

  <!-- Animation Css -->
  <link href="/plugins/animate-css/animate.css" rel="stylesheet" />

  <!-- Custom Css -->
  <link href="/css/style.css" rel="stylesheet">



{{/if}}
</head>
<!--Load view-->
{{#if user}}
<body class="theme-red" style="overflow: hidden;">
{{{body}}}
{{else}}
<body class="login-page">
<div class="login-box">
    <div class="logo">
        <a href="javascript:void(0);">Pek<b>Tos</b></a>
        <small>Right On Target</small>
    </div>
    <div class="card">
        <div class="body">
            <form id="sign_in" method="POST">
                <div class="msg">
                  {{#if success_msg}} <!--Global variable that has been set in app.js-->
                  <div class="alert alert-success">{{success_msg}}
                  </div>
                  {{/if}}
                  {{#if error_msg}}
                  <div class="alert alert-danger">{{error_msg}}
                  </div>
                  {{/if}}
                  {{#if error}}
                  <div class="alert alert-danger">{{error}}
                  </div>
                  {{/if}}
                  {{{body}}}
                </div>
            </form>
        </div>
    </div>
</div>
{{/if}}
{{#if user}}

<script>

    $('#localVideos').click(function(){
        $('nav').toggle('drop',{direction: 'up'}, 500);
        $('.btnMenuFloat').toggle('drop',{direction: 'left'}, 500);
        $('.actionBtnFloat').toggle('drop',{direction: 'down'}, 500);
        $('.btnfloat').toggle('drop',{direction: 'down'}, 500);
        $('.actionPanel2').hide();
    });

    function muteMe(id) {
        if($('.cv'+id).prop('muted')){
             $('.cv'+id).prop('muted', false);
             var child = document.getElementById("micid"+id);
             child.innerHTML = "mic";
             $('.micbut'+id).css("color", "green");
        }
        else{
             $('.cv'+id).prop('muted', true);
             var child = document.getElementById("micid"+id);
             child.innerHTML = "mic_off";
             $('.micbut'+id).css("color", "red");
        }
    }

    function showMe(id) {
        $('#span'+id).toggle("drop",{direction: 'right'},500);
    }

    $(document).ready(function(){
        var socket = io();

            //understand button
        $(".understandbtn").click(function(){
            //reset the timer every 3 second of interval
            $('.actionBtnFloat').css('z-index','0');
在我的视图->布局->布局.把手上

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');

//User Schema
var UserSchema = mongoose.Schema({
username:{
    type: String,
    index:true
},
password:{
    type:String
},
email:{
    type:String
},
name:{
    type:String
},
field:{
    type:String
},
e_money:{
    type:Number //this is the integer form in mongoose
}
});

//accesible variable from the outside
var User = module.exports = mongoose.model('User', UserSchema);

//create the user
module.exports.createUser= function(newUser, callback){
bcrypt.genSalt(10, function(err,salt){
bcrypt.hash(newUser.password, salt, function(err, hash){
    //store hash in your password DB
    newUser.password = hash;
    newUser.save(callback);
});
});
}



module.exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
}

module.exports.getUserById = function(id, callback){
User.findById(id, callback);
}

module.exports.comparePassword = function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, function(err, isMatch){
    if(err) throw err;
    callback(null, isMatch);
});
}
//To run the application
var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

var User = require('../models/user');

//Register
router.get('/register', function(req,res){
res.render('register');
});

//Login
router.get('/login',function(req,res){
res.render('login');
});

//Register User
router.post('/register', function(req,res){
var name = req.body.name;
var email = req.body.email;
var username = req.body.username;
var password = req.body.password;
var password2 = req.body.password2;
var field = req.body.field;

//temporary for emoney
var e_money = req.body.e_money;

//show what's been written in web to console(name)
//console.log(name);

//validation - Check to see if the field is empty
req.checkBody('name', 'Name is required!').notEmpty();
req.checkBody('email', 'Email is required!').notEmpty();
req.checkBody('email', 'Email is not valid!').isEmail();
req.checkBody('username', 'Username is required!').notEmpty();
req.checkBody('password', 'Password is required!').notEmpty();
req.checkBody('password2', 'Password does not match').equals(req.body.password);
req.checkBody('field', 'Please specify if you are a Teacher or a Student!').notEmpty();

//temporary for emoney
req.checkBody('e_money','Please add some value in this field').notEmpty();

var errors = req.validationErrors();

if(errors){
    res.render('register',{
        errors:errors
    });
}else{
        //new user in the model(user.js)
    var newUser = new User({
        name: name,
        email: email,
        username: username,
        password: password,
        field: field,
        e_money: e_money //temporary emoney
    });

    User.createUser(newUser,function(err, user){
        if(err) throw err;
        console.log(user);
    });
    req.flash('success_msg', 'You are registed and can now login');

    res.redirect('/users/login');
}
});




passport.use(new LocalStrategy(
function(username, password, done){
User.getUserByUsername(username, function(err, user){
    if(err) throw err;
    if(!user){
        return done(null, false, {message: 'Unknown User'});
    }

    User.comparePassword(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
            return done(null, user);
        }
        else{
            return done(null, false, {message: "Invalid password"});
        }
    });
});
}));

passport.serializeUser(function(user, done){
done(null, user.id);
});

passport.deserializeUser(function(id, done){
User.getUserById(id, function(err, user){
    done(err,user);
});
});

router.post('/login',
passport.authenticate('local',{sucessRedirect:'/',failureRedirect:'/users/login',failureFlash: true}),
function(req,res){
    //dashboard
    if (req.user.field == "student") {
        req.flash('stud_val', 'student');
    }else if(req.user.field == "teacher"){
        req.flash('teach_val', 'teacher');
    }else if (req.user.field == "admin") {
        req.flash('admin_val', 'teacher');
    }
    res.redirect('/');
});

router.get('/logout',function(req, res){
req.logout();
req.flash('success_msg', 'You are logged out');

res.redirect('/users/login');
})


module.exports = router;
<!DOCTYPE html>
<html>
<head>
{{#if user}}
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<title>PEKTOS | Live Stream</title>
<!-- Favicon-->
<link rel="icon" href="favicon.ico" type="image/x-icon">
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css?family=Roboto:400,700&subset=latin,cyrillic-ext" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" type="text/css">
<!-- Bootstrap Core Css -->
<link href="plugins/bootstrap/css/bootstrap.css" rel="stylesheet">
<!-- Waves Effect Css -->
<link href="plugins/node-waves/waves.css" rel="stylesheet" />
<!-- Animation Css -->
<link href="plugins/animate-css/animate.css" rel="stylesheet" />
<!-- Morris Chart Css-->
<link href="plugins/morrisjs/morris.css" rel="stylesheet" />
<!-- Custom Css -->
<link href="css/style.css" rel="stylesheet">
<!-- AdminBSB Themes. You can choose a theme from css/themes instead of get all themes -->
<link href="css/themes/all-themes.css" rel="stylesheet" />

<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="/easyrtc/easyrtc.js"></script>
<script type="text/javascript" src="/easyrtc/labs/easyrtc_recorder.js">    </script>
{{#if stud_val}}
    <script type="text/javascript" src="js/demo_multistream_stud.js"></script>
{{/if}}
{{#if teach_val}}
    <script type="text/javascript" src="/easyrtc/labs/desktop_capture_iframe_version.js"></script>
    <script type="text/javascript" src="js/demo_multistream.js"></script>
{{/if}}
<!-- <script type="text/javascript" src="js/demo_instant_messaging_rooms.js"></script> -->

<!-- for button -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.js"></script>
<script type="text/javascript" src="prettify/prettify.js"></script>
<script type="text/javascript" src="js/jquery.slimscroll.js"></script>



{{else}}
  <meta charset="UTF-8">
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <title>Pektos | Log in</title>
  <!-- Favicon-->
  <link rel="icon" href="/favicon.ico" type="image/x-icon">
  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css?family=Roboto:400,700&subset=latin,cyrillic-ext" rel="stylesheet" type="text/css">
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" type="text/css">

    <!-- Bootstrap Select Css -->
    <link href="plugins/bootstrap-select/css/bootstrap-select.css" rel="stylesheet" />

  <!-- Bootstrap Core Css -->
  <link href="/plugins/bootstrap/css/bootstrap.css" rel="stylesheet">

  <!-- Waves Effect Css -->
  <link href="/plugins/node-waves/waves.css" rel="stylesheet" />

  <!-- Animation Css -->
  <link href="/plugins/animate-css/animate.css" rel="stylesheet" />

  <!-- Custom Css -->
  <link href="/css/style.css" rel="stylesheet">



{{/if}}
</head>
<!--Load view-->
{{#if user}}
<body class="theme-red" style="overflow: hidden;">
{{{body}}}
{{else}}
<body class="login-page">
<div class="login-box">
    <div class="logo">
        <a href="javascript:void(0);">Pek<b>Tos</b></a>
        <small>Right On Target</small>
    </div>
    <div class="card">
        <div class="body">
            <form id="sign_in" method="POST">
                <div class="msg">
                  {{#if success_msg}} <!--Global variable that has been set in app.js-->
                  <div class="alert alert-success">{{success_msg}}
                  </div>
                  {{/if}}
                  {{#if error_msg}}
                  <div class="alert alert-danger">{{error_msg}}
                  </div>
                  {{/if}}
                  {{#if error}}
                  <div class="alert alert-danger">{{error}}
                  </div>
                  {{/if}}
                  {{{body}}}
                </div>
            </form>
        </div>
    </div>
</div>
{{/if}}
{{#if user}}

<script>

    $('#localVideos').click(function(){
        $('nav').toggle('drop',{direction: 'up'}, 500);
        $('.btnMenuFloat').toggle('drop',{direction: 'left'}, 500);
        $('.actionBtnFloat').toggle('drop',{direction: 'down'}, 500);
        $('.btnfloat').toggle('drop',{direction: 'down'}, 500);
        $('.actionPanel2').hide();
    });

    function muteMe(id) {
        if($('.cv'+id).prop('muted')){
             $('.cv'+id).prop('muted', false);
             var child = document.getElementById("micid"+id);
             child.innerHTML = "mic";
             $('.micbut'+id).css("color", "green");
        }
        else{
             $('.cv'+id).prop('muted', true);
             var child = document.getElementById("micid"+id);
             child.innerHTML = "mic_off";
             $('.micbut'+id).css("color", "red");
        }
    }

    function showMe(id) {
        $('#span'+id).toggle("drop",{direction: 'right'},500);
    }

    $(document).ready(function(){
        var socket = io();

            //understand button
        $(".understandbtn").click(function(){
            //reset the timer every 3 second of interval
            $('.actionBtnFloat').css('z-index','0');
//结束

            clearTimeout(interval);
            //send the data to the server
            socket.emit('chat message', getUser());
            var interval = setTimeout(function(){
                $('.'+getUser()).fadeIn();
            },5000);
        });

        socket.on('chat message', function(msg){
            $('.cv'+msg).fadeOut();
            $('.'+msg).append('<img id="bulb" class="actImage" src="images/understand button.png" width="50" height="50">');
            $('#say'+msg).html('I understand');
            var intervals = setTimeout(function(){
                $('#say'+msg).html('');
                $('#bulb').remove();
                $('.cv'+msg).fadeIn();
            },5000);
        });

        //understand button end
clearTimeout(间隔);
//将数据发送到服务器
emit('chat message',getUser());
var interval=setTimeout(函数(){
$('.+getUser()).fadeIn();
},5000);
});
socket.on('chat message',函数(msg){
$('.cv'+msg).fadeOut();
$('.+msg).append('');
$('#说'+msg).html('我明白');
var interval=setTimeout(函数(){
$('#说'+msg).html('');
$(“#灯泡”)。移除();
$('.cv'+msg.fadeIn();
},5000);
});
//了解按钮末端

不,您不能
在浏览器中要求

服务器端JavaScript(NodeJS)和客户端JavaScript之间有很大的区别。客户端JavaScript还没有模块系统,您无法在JavaScript文件中导入/导出内容

这对于JavaScript来说是一个巨大的缺点,并且会产生许多问题。例如,如果多个JS文件想要彼此通信,则它们依赖于全局名称空间

当NodeJS被引入时,它的创建者意识到了这个问题,并创建了
require
/
模块.exports
模式。如果希望客户端JavaScript具有相同的行为,则必须使用模块绑定器,例如、、等

客户端JavaScript用于用户交互,而NodeJS几乎可以做任何你想做的事情(读取/写入服务器硬盘上的文件,访问数据库等等);但它只能在服务器上运行

在客户端JavaScript中,您不需要
mongoose
模块,因此无法访问服务器上的数据库

此外,客户端JavaScript甚至不需要访问服务器的数据库。如果可能的话,这将是一个安全隐患

如果确实需要将数据从数据库传输到浏览器,请使用

当然,WebSocket是在客户端和服务器之间传输数据的另一种可能性。由于您已经在使用它们(我猜是socket.io),下面是一个如何执行此操作的示例(我猜这就是您希望在客户端代码中触发数据库更新的地方):

$(“.undersandbtn”)。单击(函数(){
//每隔3秒重置一次计时器
$('.actionBtnFloat').css('z-index','0');
风险价值扣除额=100;
var newMoney={{user.e_money}}-扣除;
//向服务器发送电子货币价值已更改的消息
socket.emit('更新电子货币'{
用户名:{{user.name}
新钱
});
清除超时(间隔);
//将数据发送到服务器
emit('chat message',getUser());
变量间隔=设置超时(函数(){
$('.+getUser()).fadeIn();
}, 5000);
});
socket.on('update e-money response',函数(数据){
提醒(“您的钱是:“+data.newMoney”);
});
socket.on('update e-money error',函数(数据){
警报(“无法更新您的资金:+data.error”);
});
在服务器上,您可以执行以下操作:

//也许您给socket服务器变量的名称与“socket”不同
socket.on('update e-money',函数(数据){
var userName=data.userName;
var newMoney=data.newMoney;
var query={username:username};
//这是更新数据库中条目的方式吗?
User.findOneAndUpdate(查询,{e_money:newMoney},{upsert:true},函数(err,doc){
如果(错误){
emit('update e-money error',{error:err});
}
emit('update e-money response',{newMoney:newMoney});
});
});

不,您不能
在浏览器中要求

服务器端JavaScript(NodeJS)和客户端JavaScript之间有很大的区别。客户端JavaScript还没有模块系统,您无法在JavaScript文件中导入/导出内容

这对于JavaScript来说是一个巨大的缺点,并且会产生许多问题。例如,如果多个JS文件想要彼此通信,则它们依赖于全局名称空间

当NodeJS被引入时,它的创建者意识到了这个问题,并创建了
require
/
模块.exports
模式。如果希望客户端JavaScript具有相同的行为,则必须使用模块绑定器,例如、、等

客户端JavaScript用于用户交互,而NodeJS几乎可以做任何你想做的事情(读取/写入服务器硬盘上的文件,访问数据库等等);但它只能在服务器上运行

在客户端JavaScript中,您不需要
mongoose
模块,因此无法访问服务器上的数据库

此外,客户端JavaScript甚至不需要访问服务器的数据库。如果可能的话,这将是一个安全隐患

如果确实需要将数据从数据库传输到浏览器,请使用

当然,WebSocket是在客户端和服务器之间传输数据的另一种可能性。由于您已经在使用它们(我猜是socket.io),下面是一个如何执行此操作的示例(我猜这就是您希望在客户端代码中触发数据库更新的地方):

$(“.undersandbtn”)。单击(函数(){
//每隔3秒重置一次计时器
$('.actionBtnFloat').css('z-index','0');
风险价值扣除额=100;
var newMoney={{user.e_money}}-扣除;
//向服务器发送电子货币价值已更改的消息
socket.emit('更新电子货币'{
用户名: