node.js - Mongoose报告写入成功,数据库中没有任何内容

标签 node.js mongodb express mongoose

当我通过控制台与 Mongo 交互时, Mongoose 成功回调正在运行,但我的数据库中没有出现任何内容。

任何人都可以帮忙解释为什么数据库中没有出现任何内容吗?

app.js

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , mongoose = require('mongoose');

var app = express();

var TimesheetsController = require(__dirname + '/controllers/timesheets');
var UsersController = require(__dirname + '/controllers/users');

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

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

app.get('/timesheets', TimesheetsController.list);
app.post('/timesheets', TimesheetsController.add);
app.get('/users', UsersController.list)

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

timesheet.js Controller

var TimesheetsModel = require('../models/timesheets');

var TimesheetsController = {

    list : function(req, res){
        TimesheetsModel.listTimesheetsByUser(function(){res.render('timesheets/index', { title: 'Timesheets',timesheets: {} });});
    },
    add : function(req, res){
        TimesheetsModel.newTimesheet(10, req.body, function(err){ 
                                                        if(err){
                                                            res.json({'message':'failed.'})
                                                        }else{
                                                            res.json({'message':'success!'})
                                                        }; 
                                                    });
    }
}

module.exports = TimesheetsController;

timesheet.js 模型

var mongoose = require('mongoose')
  , Schema = mongoose.Schema
  , ObjectId = Schema.ObjectId;

var db = mongoose.createConnection('localhost', 'timetracker');

var TimesheetSchema = mongoose.Schema({
  'date': Date,
  'lines': [ {any: Schema.Types.Mixed} ],
  'user_id': ObjectId
});

var Timesheet = db.model('Timesheet', TimesheetSchema)


// Timesheet.virtual('id')
//   .get(function() {
//     return this._id.toHexString();
//   });

// Timesheet.pre('save', function(next) {
//   this.keywords = extractKeywords(this.data);
//   next();
// }); 


mongoose.model('Timesheet', Timesheet);

TimesheetsModel = {
    listTimesheetsByUser : function(callback){
    console.log('listing timesheets');
    callback();

    },

  newTimesheet : function(user,data,callback){

    var date = data.date;
    var lines = data.lines;
    var u = user;

    console.log(lines);

    var ts = new Timesheet({ "date": Date.now(),"lines":lines, "user_id":u });

    ts.save(function (err) {
        if (err) callback(err);
        console.log('adding new timesheet'); //this is output
        callback();
    });
  }
};

module.exports = TimesheetsModel

最佳答案

几个问题 - 我从您的代码中猜测您遇到了错误。您需要修复一些问题:

a) 返回回调:

 if (err) return callback(err);
 console.log('adding new timesheet'); //this is output
 callback();

b) 我怀疑该错误与您将“10”作为用户 ID 传递有关。您的架构设置为需要一个 ObjectId(24 个字符),因此会失败。

关于node.js - Mongoose报告写入成功,数据库中没有任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12321772/

相关文章:

mongodb - 没有文件系统的键值存储?

javascript - 使用 MongoDB 和 Nodejs 传递两个查询

javascript - 如何使用 Visual Studio Code 通过附加到正在运行的进程来调试 Node 上的 Express js 服务器代码

node.js - 在 expressjs 中设置请求清理中间件

MongoDB:删除集合与删除所有文档的权衡

javascript - 回调 hell ,厄运金字塔,node.js

javascript - 图像链接连接与 ejs 语法?

android - NativeScript 不适用于 Linux 和 Node.js 11.1.0

javascript - 单击时根据按钮 ID 显示内容

node.js - 为什么我需要在 package.json 上有一个构建脚本来在 Now 上部署一些东西?我该如何解决?