onclick内部调用的Javascript函数不会实例化mongoose模型

onclick内部调用的Javascript函数不会实例化mongoose模型,javascript,jquery,node.js,mongodb,mongoose,Javascript,Jquery,Node.js,Mongodb,Mongoose,我有一个名为save的函数,它是用来保存计时器中的数据的 具有该模型的类如下所示: var Schema = mongoose.Schema; var Timer = new Schema({ Time: {type: Number}, Desc: {type: String}, Doc: {type: String} }); Timer.statics.findByDesc = function(value, callback){ this.find({

我有一个名为save的函数,它是用来保存计时器中的数据的

具有该模型的类如下所示:

var Schema = mongoose.Schema;


var Timer = new Schema({
    Time: {type: Number},
    Desc: {type: String},
    Doc: {type: String}
});

Timer.statics.findByDesc = function(value, callback){
    this.find({ Desc: {"$regex": value, "$options": "i"}}, callback);
}

Timer.statics.findByDoc = function(value, callback) {
    this.find({ Doc: { "$regex": value, "$options": "i" }}, callback);
}

Timer.statics.findAll = function(callback){
    this.find({}, callback);
}


module.exports = mongoose.model('Timer', Timer);
模型由以下代码定义,该代码随以下代码导入:

var Timer = require('./../../models/timer');
但我正在用一个函数中的常量测试它,这个函数通过单击按钮调用,这是函数中的代码:

var newTimer = new Timer({
    Time: 6000, Desc: "My first timertest!", Doc: "Test's Dossier"
});
newTimer.save();
然而,通过反复试验,我发现它从未调用过
newTimer.save()
,它似乎在某个地方被卡住了,没有离开
var newTimer=new Timer()
函数。 我在其他文件中尝试了计时器模型代码,代码如下:

/**
 * Created by kevin on 08/03/2016.
 */
var Timer = require('../models/timer'),
mongoose = require('mongoose');


mongoose.connect('mongodb://localhost:27017/legalapp');
mongoose.connection.on('open', function() {
    console.log('Mongoose connected.');
});

var newTimer = new Timer({
    Time: 5000, Desc: "My first timertest!", Doc: "Test's Dossier"
});



console.log(newTimer.Time);
console.log(newTimer.Desc);
console.log(newTimer.Doc);
newTimer.save();
mongoose.connection.close();
这确实有效,所以经过3个小时的尝试,我快疯了,所以我来到这里。 我在项目中使用javascript、nodeJS、jquery和mongoose

以下是整个文件:

var timers = [], Timer = require('./../../models/timer');

function timer(id){
    this.id = id;
    this.running = false;
    this.start = new Date();
    this.current = new Date();
    this.paused = new Date();
    this.timed = 0;
    this.desc = "";
    this.pauseTime = 0;
    this.pauseTimeBuffer = 0;
    this.prevTimed = 0;
    this.first = true;
    this.h = Math.floor(this.timed / 1000 / 60 / 60);
    this.timed -= this.h * 1000 * 60 * 60;
    this.h = checkTime(this.h);
    this.m = Math.floor(this.timed / 1000 / 60);
    this.timed -= this.m * 1000 * 60;
    this.m = checkTime(this.m);
    this.s = Math.floor(this.timed / 1000);
    this.timed -= this.s * 1000;
    this.s = checkTime(this.s);
}

function startTime(timer){
    if(!timer.running) {
        if (timer.first) {
            timer.start = new Date();
            timer.first = false;
        }
        timer.running = true;
        time(timer);
    }
}

function stopTime(timer){
    if(timer.running) {
        if (timer.pauseTime === 0) {
            timer.paused = new Date();
        } else {
            timer.paused = new Date();
            timer.pauseTimeBuffer = timer.pauseTime;
        }
        timer.running = false;
        time(timer);
    }
}

function save(timer){
    //stopTime(timer);
    /*var desc = prompt("Enter the description of this task", timer.desc);
    var dossier = prompt("What dossier does this timer belong to?");
    var current = new Date();
    var timed = timer.current - timer.start;
    timed -= timer.pauseTime;
    */
    var newTimer = new Timer();
    newTimer.Time = 6000;
    newTimer.Desc = "My first timertest!";
    newTimer.Doc = "Test's Dossier";
    newTimer.save();
    alert("yay");
}

function time(timer) {
    if(timer.running) {
        var name = '#timer' + timer.id;
        var $time = $('' + name);
        timer.current = new Date();
        timer.timed = timer.current - timer.start;
        timer.timed -= timer.pauseTime;
        timer.h = Math.floor(timer.timed / 1000 / 60 / 60);
        timer.timed -= timer.h * 1000 * 60 * 60;
        timer.h = checkTime(timer.h);
        timer.m = Math.floor(timer.timed / 1000 / 60);
        timer.m = checkTime(timer.m);
        timer.timed -= timer.m * 1000 * 60;
        timer.s = Math.floor(timer.timed / 1000);
        timer.timed -= timer.s * 1000;
        timer.s = checkTime(timer.s);
        $time.html("" + timer.h + ":" + timer.m + ":" + timer.s);
        //var t = setTimeout(time(timer), 10);
    }else{
        timer.current = new Date();
        timer.pauseTime = timer.current - timer.paused;
        timer.pauseTime += timer.pauseTimeBuffer;
        //var t = setTimeout(time(timer), 10);
    }
}

function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;
}

function init(timer){
    var name = "#timer" + timer.id;
    var $time = $('' + name)
    $time.html("" + timer.h + ":" + timer.m + ":" + timer.s);
    run();
}

function run(){
        for(i = 0; i < timers.length;i++){
            var timer = timers[i];
            setTimeout(time(timer), 10);
        }
    setTimeout(run, 10);
}

function action(id, action){
    if(action === "start"){
        var t = timers[id - 1];
        startTime(t);
    }else if(action === "stop"){
        var t = timers[id - 1];
        stopTime(t);
    }else if(action === "save"){
        var t = timers[id - 1];
        save(t);
    }
}

function stopAll(){
    for(i = 0; i < timers.length; i++){
       var t = timers[i];
       stopTime(t);
    }
}

function add(){
    stopAll();
    var number = timers.length + 1;
    var starttext = '"start"';
    var savetext = '"save"';
    var stoptext = '"stop"';
    var newTimer = new timer(number);
    timers.push(newTimer);
    $('#timers').append("<br/>" +
        "<h1>Timer " + number + "</h1>" +
        "<div id=" + 'timer' + number + ">Test</div>" +
        "<button onclick='action(" + number + ", " + starttext + ")" + "'>Start</button>" +
        "<button onclick='action(" + number + ", " + stoptext + ")" + "'>Stop</button>" +
        "<button onclick='add()'>Add</button>" +
        "<button onclick='action(" + number + ", " + savetext + ")" + "'>Save</button>" +
        "<p class='description' id='" + 'desc' + number + "'>Click here to enter a description</p>");
    $(".description").click(function(){
        var text = prompt("Please enter your description here");
        if(text === ""||text === null) {
            $(this).html("Click here to enter a description");
        }else{
            $(this).html(text);
            timers[number - 1].desc = text;
        }
    });
    init(newTimer);
    setTimeout(startTime(newTimer));
}
var timers=[],Timer=require('./../../models/Timer');
功能计时器(id){
this.id=id;
this.running=false;
this.start=新日期();
this.current=新日期();
this.paused=新日期();
这个时间=0;
this.desc=“”;
this.pauseTime=0;
this.pauseTimeBuffer=0;
此值为0;
第一个=正确;
this.h=数学楼层(this.timed/1000/60/60);
this.timed-=this.h*1000*60*60;
this.h=检查时间(this.h);
this.m=数学楼层(this.timed/1000/60);
this.timed-=this.m*1000*60;
this.m=检查时间(this.m);
this.s=Math.floor(this.timed/1000);
this.timed-=this.s*1000;
this.s=检查时间(this.s);
}
功能启动时间(计时器){
如果(!timer.running){
如果(计时器优先){
timer.start=新日期();
timer.first=false;
}
timer.running=true;
时间(计时器);
}
}
功能停止时间(计时器){
如果(计时器正在运行){
if(timer.pauseTime==0){
timer.paused=新日期();
}否则{
timer.paused=新日期();
timer.pauseTimeBuffer=timer.pauseTime;
}
timer.running=false;
时间(计时器);
}
}
功能保存(计时器){
//停止时间(计时器);
/*var desc=prompt(“输入此任务的描述”,timer.desc);
var dossier=提示(“此计时器属于哪个档案?”);
var current=新日期();
var timed=timer.current-timer.start;
timed-=timer.pauseTime;
*/
var newTimer=新计时器();
新时间=6000;
newTimer.Desc=“我的第一次测试!”;
newTimer.Doc=“测试档案”;
newTimer.save();
警惕(“耶”);
}
功能时间(计时器){
如果(计时器正在运行){
变量名称='#timer'+timer.id;
变量$time=$(''+名称);
timer.current=新日期();
timer.timed=timer.current-timer.start;
timer.timed-=timer.pauseTime;
timer.h=数学地板(timer.timed/1000/60/60);
timer.timed-=timer.h*1000*60*60;
timer.h=检查时间(timer.h);
timer.m=数学地板(timer.timed/1000/60);
timer.m=检查时间(timer.m);
timer.timed-=timer.m*1000*60;
timer.s=数学地板(timer.timed/1000);
timer.timed-=timer.s*1000;
timer.s=检查时间(timer.s);
$time.html(“+timer.h+”:“+timer.m+”:“+timer.s”);
//var t=设置超时(时间(计时器),10);
}否则{
timer.current=新日期();
timer.pauseTime=timer.current-timer.paused;
timer.pauseTime+=timer.pauseTimeBuffer;
//var t=设置超时(时间(计时器),10);
}
}
功能检查时间(i){
如果(i<10){i=“0”+i};//在<10的数字前面加零
返回i;
}
函数初始化(计时器){
var name=“#timer”+timer.id;
变量$time=$(''+名称)
$time.html(“+timer.h+”:“+timer.m+”:“+timer.s”);
run();
}
函数运行(){
对于(i=0;i+
“计时器”+数字+“”+
“测试”+
“开始”+
“停下来”+
“添加”+
“保存”+
“

单击此处输入说明”

”; $(“.description”)。单击(函数(){ var text=提示(“请在此处输入您的描述”); 如果(文本===“”| |文本===null){ $(this.html(“单击此处输入说明”); }否则{ $(this).html(文本); 计时器[number-1].desc=文本; } }); init(newTimer); setTimeout(startTime(newTimer)); }

Save
是我遇到问题的函数。

不能使客户端Javascript和服务器端Javascript在同一个文件中共存。Jquery/HTML代码在浏览器中运行,nodejs/express在服务器中运行

对客户机-服务器概念的参考


使用NodeJS的一些很好的参考


示例应用程序


您是否尝试将代码放入:mongoose.connection.on('open')函数回调?顺便说一句,您的计时器要求是:require('./../../../../models/Timer')或require('../../models/Timer')?require指的是具有相同代码的不同文件(除了在别处打开连接),我在不同的文件夹中测试,因此使用了不同的文件