onclick内部调用的Javascript函数不会实例化mongoose模型
我有一个名为save的函数,它是用来保存计时器中的数据的 具有该模型的类如下所示: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({
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指的是具有相同代码的不同文件(除了在别处打开连接),我在不同的文件夹中测试,因此使用了不同的文件