【问题标题】:Cannot find module '../models/* Trying to create REST api in Node.js and MongoDB找不到模块 '../models/* 试图在 Node.js 和 MongoDB 中创建 REST api
【发布时间】:2022-01-02 04:58:50
【问题描述】:

开始使用 Node.js 和 Mongo DB 创建 REST api 所以有件事我想知道。我收到此错误

Cannot find module '../models/book

更详细的错误如下所示:

PS D:\node_apps\mongo1> npm start

> mongo1@0.0.0 start D:\node_apps\mongo1
> node ./bin/www

internal/modules/cjs/loader.js:892        
  throw err;
  ^

    Error: Cannot find module '../models/book'
    Require stack:
    - D:\node_apps\mongo1\routes\users.js     
    - D:\node_apps\mongo1\app.js
    - D:\node_apps\mongo1\bin\www
        at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15)
        at Function.Module._load (internal/modules/cjs/loader.js:745:27)
        at Module.require (internal/modules/cjs/loader.js:961:19)
        at require (internal/modules/cjs/helpers.js:92:18)
        at Object.<anonymous> (D:\node_apps\mongo1\routes\users.js:3:12)
        at Module._compile (internal/modules/cjs/loader.js:1072:14)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
        at Module.load (internal/modules/cjs/loader.js:937:32)
        at Function.Module._load (internal/modules/cjs/loader.js:778:12)
        at Module.require (internal/modules/cjs/loader.js:961:19) {
      code: 'MODULE_NOT_FOUND',
      requireStack: [
        'D:\\node_apps\\mongo1\\routes\\users.js',
        'D:\\node_apps\\mongo1\\app.js',
        'D:\\node_apps\\mongo1\\bin\\www'
      ]
    PS D:\node_apps\mongo1> npm start
    
    > mongo1@0.0.0 start D:\node_apps\mongo1
    > node ./bin/www
    
    internal/modules/cjs/loader.js:892        
      throw err;
      ^
    
    Error: Cannot find module './routes/books'
    Require stack:
    - D:\node_apps\mongo1\app.js
    - D:\node_apps\mongo1\bin\www
        at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15)
        at Function.Module._load (internal/modules/cjs/loader.js:745:27)
        at Module.require (internal/modules/cjs/loader.js:961:19)
        at require (internal/modules/cjs/helpers.js:92:18)
        at Object.<anonymous> (D:\node_apps\mongo1\app.js:9:15)
        at Module._compile (internal/modules/cjs/loader.js:1072:14)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
        at Module.load (internal/modules/cjs/loader.js:937:32)
        at Function.Module._load (internal/modules/cjs/loader.js:778:12)
        at Module.require (internal/modules/cjs/loader.js:961:19) {
      code: 'MODULE_NOT_FOUND',
      requireStack: [
        'D:\\node_apps\\mongo1\\app.js',
        'D:\\node_apps\\mongo1\\bin\\www'
      ]
    }
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! mongo1@0.0.0 start: `node ./bin/www`
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the mongo1@0.0.0 start script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     C:\Users\emi\AppData\Roaming\npm-cache\_logs\2021-11-23T17_18_24_504Z-debug.log
    PS D:\node_apps\mongo1>
    PS D:\node_apps\mongo1> 

我的源代码是这样看的:

Database.js

var mongoose = require('mongoose');
mongoose.connect('mongodb+srv://admin:****@cluster0.cqryc.mongodb.net/test', {useNewUrlParser: true});

var conn = mongoose.connection;
conn.on('connected',function(){
    console.log('Connected');  
});

module.exports = conn;

userModel.js

var db = require('../database');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var BookSchema = new Schema({
    title : String,
    author : String,
    category : String,
});

module.exports = mongoose.model('Book',BookSchema);

users.js

var express = require('express');
var router = express.Router();
var Book = require('../models/book');


router.get('/', function(req, res) {
  Book.find({}).exec(function(err,books){
    if(err){
      res.send('error occured');
    }else{
      res.json(books);
    }
     });
});

router.get('/:id', function(req, res) {
  Book.findOne({
    _id : req.params.id
  }).exec(function(err,books){
    if(err){
      res.send('error occured');
    }else{
      res.json(books);
    }
     });
});


router.post('/',function(req,res){
  var newBook = new Book();
  newBook.title = req.body.title;
  newBook.author = req.body.author;
  newBook.category = req.body.category;
  newBook.save(function(err,book){
    if(err){
      res.send('error saving book');
    }else{
      res.send(book);
    }
  })
})

module.exports = router;

App.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
const books = require('./routes/books');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/books', books);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});



// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


app.use((err, req, res, next) => {
  // console.log(err);
  err.statusCode = err.statusCode || 500;
  err.message = err.message || "Internal Server Error";
  res.status(err.statusCode).json({
    message: err.message,
  });
});

module.exports = app;

我做错了什么?请我需要指导。我正在努力让它工作,只是在这里遗漏了一些东西。

【问题讨论】:

    标签: node.js mongodb rest


    【解决方案1】:

    我让它工作了。 Schema=> Tables ,我引用了非常错误的信息,但我让一切正常工作

    所以我最终得到了这个,而不是var Book = require('../models/book');

    var Book = require('../models/userModel');
    

    然后我也添加了这个app.use('/books', books);

    它解决了所有问题。也设置 Cors,一切都很好并且工作正常

    谢谢大家,谢谢克雷格!

    【讨论】:

      【解决方案2】:

      下面是您尝试查找模块的位置。您是说它位于您用来在此处运行应用程序的目录之外的目录中 ../

      这是你的意图吗?

      var Book = require('../models/book');
      

      Book 就像在您的应用程序中创建的类一样,因此如果这是正确的,您需要在层次结构中找到它并正确引用它。如果它与起始 .js 文件位于同一位置,那么它应该是:

      var Book = require('./models/book');
      

      编辑 - 我刚刚看到了导出。

      userModel.js

      var db = require('../database');
      var mongoose = require('mongoose');
      var Schema = mongoose.Schema;
      
      var BookSchema = new Schema({
          title : String,
          author : String,
          category : String,
      });
      
      module.exports = mongoose.model('Book',BookSchema);
      

      在此处的底部,您似乎正在将其导出为书籍。我不是这里的大师,但每当我导出一个类时,我都会使用它来引用它

      var Book = require('userModel.js')

      所以 .js 文件名。

      【讨论】:

      • 我让它工作了。让我发布答案。
      • 太好了,很高兴我的建议奏效了
      猜你喜欢
      • 2020-06-05
      • 2020-04-14
      • 2012-12-22
      • 2017-01-22
      • 1970-01-01
      • 2017-05-14
      • 2016-09-19
      • 1970-01-01
      • 2018-02-12
      相关资源
      最近更新 更多