繁体   English   中英

节点JS在另一个文件夹中找不到文件的模块错误

[英]Node JS cannot find module error for file in another folder

如果我在与index.js相同的文件夹中有schema.js,则执行以下操作

var schemas = require('./schema');

工作正常,但如果我将schema.js放在另一个文件夹中并编写

var schemas = require('./folder/schema');

我收到错误消息Cannot find module发生了什么?

Edit1:我通过使用..folder / schema而不是single摆脱了错误。 服务器正在运行,但是它仍然无法正常工作,因为我无法使用index.js文件中从../model/schema通过module.export返回的mongoosedb对象。 它说myModel.find不是函数。 这是怎么回事??

控制器/findallusers.js

var myModel = require('../models/schema');

var alluser;

myModel.find({}, function(err, foundData){   
  if(err){
    console.log(err);
    res.status(500).send();
  }
  else{
        alluser = foundData;
      }

    console.log(alluser); <-- this log is defined
});

    console.log(alluser); <-- this log is undefined

    module.exports = alluser; <-- cant export anything

正确解析schema.js的路径

假设您的项目结构是这样的

Project
 |
 +-- routers
 |  |  
 |  +-- index.js    
 +-- models
 |  |  
 |  +-- schema.js


//in index.js 
var schemas = require('../models/schema');

要解决第二个错误,即myModel.find不是函数,请使用module.exports而不是使用module.export

module.exports = myModel;

解决您的第三个问题

// controllers/findallusers.js --> (keep name simple  i.e userController.js)
var myModel = require('../models/schema');

module.exports =  {

    /**
     * Get All Users
     */
    list: function(req, res) {
       myModel.find({},function(err, users){
          if(err) {
              return res.status(500).json({message: 'Error getting Users.'});
          }
         return res.json(users);
      });
    },
   /**
    * Keep Adding more functions as you want
   */

   create: function(req,res){
       //functionality to create user
   },

   delete: function(req,res){
      // functionality to delete user
   },

   someDummyName: function(callback) {
       myModel.find({},function(err, users){
          if(err) {
            return callback(err)
          }
         return callback(null,users);
      });
    }       

}

//解决问题的方法https://stackoverflow.com/questions/39504219/how-to-use-use-callbacks-or-promises-to-re-turn-a-object-from-an-asynchronous-fun

//index.js call this new method i.e someDummyName as  
router.get('/allusers', function(req, res){       

    userController.someDummyName(function(err,result){
      if(err) {
        //return err
      }
      //process result as per your need
    });

});

您正在从schema.js导出变量myModel,并且仅在index.js中导入架构

因此,尝试使用myModel.myModel.find()引用.find函数。我的猜测是myModel变量位于index.js中现有的myModel变量的后面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM