首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从node.js应用程序调用Mongoose Model.save()时挂起

从node.js应用程序调用Mongoose Model.save()时挂起
EN

Stack Overflow用户
提问于 2012-08-20 06:00:51
回答 2查看 6.3K关注 0票数 9

我正在尝试学习node和mongo,以便构建一个简单的web应用程序/自学更多关于web应用程序的知识。但是,当我调用Model.save()时,延续函数似乎从未执行过,数据也没有保存。

这是我到目前为止所知道的:

代码语言:javascript
复制
/* app.js */

var express = require('express')
  , app = express()
  , routes = require('./routes')
  , http = require('http')
  , path = require('path')
  , mongoose = require('mongoose')
  , db 
  , Track
  , models = require('./models.js');

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('secretstuff'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
  app.use(function(err, req, res, next){
    console.error(err.stack);
    res.send(500, 'Something broke!');
  });
});

models.defineModels(mongoose, function(){
  app.Track = Track = mongoose.model('Track');
  db = mongoose.createConnection('localhost','nextrak')
});

app.get('/', routes.index);

app.get('/dbTest', function(req, res){
  console.log("Here goes...");
  var t = new Track({
    name: "TestTrack",
    artist: "Artist",
    tags: ["test"],
    next: ["track1","track2"]
  });
  console.log("Test Track:");
  console.log(t);

  t.save(function(){
    if(err)
      console.log("Error! Couldn't complete dbTest successfully.");
    else
      console.log("Aw yiss, got dbTest working");
  })
});

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});


/*models.js*/

function defineModels(mongoose, cont){
  var Schema = mongoose.Schema;
  Track = new Schema({
    'name': { type: String, index: true },
    'artist': String,
    'tags': [String],
    'next': [String],
  });
  mongoose.model('Track', Track);
  cont();
}

exports.defineModels = defineModels;

没有抛出错误,mongo日志表明,当我启动我的应用程序时,5个新的连接被启动。不会出现新的日志( clientcursormon日志除外)。当我在Chrome中加载/dbTest时,应用程序会打印出以下内容:

开始了..。

代码语言:javascript
复制
  Test Track:
    { name: 'TestTrack',
      artist: 'Basik',
      _id: 5031606aa11cf95815000001,
      next: [ 'track1', 'track2' ],
      tags: [ 'test' ] }

Mongo似乎配置正确。当我让node运行Mongoose带你完成的简单的“入门”脚本时,一切都正常工作。

谁能指出我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-20 07:07:41

您尚未为Mongoose创建默认使用的连接。替换为:

代码语言:javascript
复制
db = mongoose.createConnection('localhost','nextrak')

有了这个:

代码语言:javascript
复制
db = mongoose.connect('localhost', 'nextrak');

几个其他的nit:

  1. 您正在将Track设置为models.js
  2. 中的全局变量,您需要在t.save回调中添加一个err参数。
票数 16
EN

Stack Overflow用户

发布于 2012-08-20 06:40:53

首先,如果只需要一个连接,就应该使用mongoose.connect()。

其次,我认为您混淆了跟踪模式和跟踪模型。这是两件不同的事情。new Schema()创建一个Schema对象,该对象被传递给mongoose.model()。在创建要存储在数据库中的新实例而不是模式时,mongoose.model的结果(似乎您正在丢弃它)是您想要使用的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12030371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档