Mongoose和新架构:返回" ReferenceError:未定义架构"

时间:2014-07-23 10:48:18

标签: node.js mongodb mongoose

我正在创建一个新的示例应用程序,我尝试通过Mongoose连接到MongoDB数据库。

我在service.js文件中创建了新架构,但在运行nodemon app.js时出现以下错误:"ReferenceError: Schema is not defined"

App.js代码:

var http = require('http');
var express = require('express');
var serials = require('./service');
var app = express();
var mongoose = require('mongoose');


var port = 4000;
app.listen(port);

mongoose.connect('mongodb://localhost:27017/serialnumbers')

app.get('/api/serials',function(req,res){
    serials.getSerial(req, res, function(err, data) {
        res.send(data);
    });
});

Service.js代码:

var mongoose = require('mongoose');

var serialSchema = new Schema({
    serial: {type: String},
    game: {type: String},
    date: {type: Date, default: Date.now},
});
mongoose.model('serials', serialSchema);

exports.getSerial = function(req,res,cb) {
    mongoose.model('serials').find(function(err,data) {
        cb(err,data);
    });
};

我在StackOverflow上看到一个答案,引用它可能是Mongoose的版本。但是npm list给了我这个:

enter image description here

知道我做错了吗?

5 个答案:

答案 0 :(得分:26)

确切地说,在Service.jsSchema是什么?您没有名为Schema的对象。

...
var serialSchema = new Schema({
                       ^^^^^^

将其更改为mongoose.Schema然后就可以了。

答案 1 :(得分:4)

你忘了在第二行

上定义这样的Schema

var Schema = mongoose.Schema

答案 2 :(得分:3)

由于多种原因,可能会发生这种情况。第一个是您可能忘记了导入Schema。您可以按以下步骤进行修复。

const Schema = mongoose.Schema;

const serialSchema = new Schema({
   serial: {type: String},
   game: {type: String},
   date: {type: Date, default: Date.now},
});

有时您忘记导入新创建的模型。可以通过将创建的模型导入到工作文件中来解决此类错误。

const serialModel = mongoose.model('serials', serialSchema);

答案 3 :(得分:1)

在我的情况下,我引用了另一个架构内部的架构,并且不得不用mongoose.Types.ObjectId替换类型:Schema.Types.ObjectId。

答案 4 :(得分:0)

在您将电话定义为mongoose.Schema的情况下,您将其定义为

const mongoose = require('mongoose');
then
const Schema = mongoose.Schema;