【问题标题】:Nodejs Mongoose - Model not definedNodejs Mongoose - 模型未定义
【发布时间】:2015-04-08 19:09:27
【问题描述】:

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

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,我不应该可以在任何地方使用它吗?

提前谢谢你!

【问题讨论】:

  • 在 wines.js 中,您仍然需要要求您要使用的架构。
  • @Let_IT_r​​oll 你检查过建议的答案了吗?

标签: node.js mongoose


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    从节点模块导出对象/值/函数不会使它们在其他模块中全局可用。导出的对象/值/函数从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
    };
    

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 2015-09-29
      • 2012-01-17
      • 2016-04-28
      • 1970-01-01
      • 2020-10-07
      • 2022-01-22
      • 2018-12-11
      • 2020-08-20
      相关资源
      最近更新 更多