【问题标题】:Exporting controller is not working in nodeJs导出控制器在 nodeJs 中不起作用
【发布时间】:2017-04-25 07:22:56
【问题描述】:

我正在创建一个简单的应用程序来显示我的数据库中的联系人/用户。我根据网上找到的一些参考资料做了以下工作。我收到错误'找不到模块'..path/controller/ContactController'

  1. 这是使用 MVC 的正确方法吗?因为我在网上发现可能会使用MVC。请提出一些在 Node js 中使用 MVC 的示例。

app.js

var express = require('express'),
http = require('http'),
path = require('path'),
mongoose = require('mongoose');

var  app = express();
mongoose.connect("mongodb://localhost/contact");

app.use(express.bodyParser());
app.use(express.bodyParser());
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', __dirname + '/view');
app.set('view engine', 'jade');

var controllerPath = __dirname + '/controller';

require('./models/contact')(mongoose);
['Contact'].forEach(function(controller){
require(controllerPath + '/' +  controller +  'Controller')(app, mongoose);
});

http.createServer(app).listen(3000, function() {
console.log('Listening on port 3000...')
})

控制器/contact.js

var Contact = require('../models/Contact');
var ContactController = function(app,mongoose){
var Contact = mongoose.model('Contact');
app.get('/contact', function(req, req){
    Contact.find({},function(err, contactinfo){

         res.render("contact",{contact: contactinfo });
    });
})
}
module.exports = ContactController;

models/contact.js

var mongoose = require('mongoose');
var ContactSchema = new mongoose.Schema({
cid: String,
name: String,
phon: Number,
contactwith: String

});
module.exports = mongoose.model('Contact', ContactSchema);

package.json

{
  "name": "SimpleAuth",
   "version": "0.0.1",
   "private": true,
    "scripts": {
      "start": "nodemon app.js"
       },
    "dependencies": {
        "express": "3.0.0rc4",
         "jade": "*",
          "mongoose": "*",
          "nodemon": "*"
         }
      }

【问题讨论】:

  • 在声明ContactController 之前缺少var 关键字。
  • @S.D 我添加了你提到的'var'仍然得到同样的错误
  • 尝试将文件名更改为小写,在某些版本的节点中恰好是一个问题

标签: javascript node.js model-view-controller


【解决方案1】:

你需要一个错误的路径。

require(controllerPath + '/' +  controller +  'Controller')(app, mongoose);

此连接与此文件名不匹配:controller/contact.js

【讨论】:

    【解决方案2】:

    如下改变forEach循环

    ['contact'].forEach(function(controller){
      require(controllerPath + '/' +  controller)(app, mongoose);
    });
    

    【讨论】:

    • 是的,它成功了,谢谢。现在我得到一个错误 can't overwrite 'Contact ' model 一旦编译。
    猜你喜欢
    • 2018-06-15
    • 2013-02-11
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2016-08-22
    相关资源
    最近更新 更多