Nodejs Mongoose - 模型未定义

时间:2015-04-02 19:39:32

标签: node.js mongoose

我正在尝试使用mongoose将一些数据发送到数据库。到目前为止,这是我的代码。

server.js

var express = require('express');
var wine = require('./routes/wines');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');

var app = express();

app.use(bodyParser.urlencoded({ extended: true}));
app.use(bodyParser.json());

app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);

app.listen(3000);
console.log('Listening on port 3000...');

wine.js(在模特文件夹内)

var mongoose = require('mongoose');
var db = mongoose.connection;

var wineSchema = new mongoose.Schema({
    name: String,
    description: String
});

var Wine = mongoose.model('Wine', wineSchema);
module.exports = Wine;

wines.js(在路线文件夹内)

exports.addWine = function(req, res) {
// Problem not defined here
var silence = new Wine({ name: 'Silence', description:"cena" })
console.log(silence.name) // 'Silence'
// add it to the database
};

我一直收到这个错误,我不明白为什么。 ReferenceError: Wine is not defined

我在wine.js(型号)中导出Wine,我不应该到处使用它吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

var Wine = require('./../models/wine.js');的开头添加wines.js(假设您的routesmodels文件夹包含在同一目录中。)

答案 1 :(得分:1)

从节点模块导出对象/值/函数不会使它们在其他模块中全局可用。导出的对象/值/函数从require返回(参考here以获取更多信息)。也就是说,Mongoose为模型和模式使用内部全局缓存,使其可以通过整个应用程序中的mongoose(或连接)使用。

因此,在您的路线文件中,您可以执行以下操作:

var Wine = mongoose.model('Wine'); // Notice we don't specify a schema
exports.addWine = function(req, res) {
  var silence = new Wine({ name: 'Silence', description:"cena" })
  console.log(silence.name) // 'Silence'
  // add it to the database
};