【问题标题】:Function.Module._resolveFilename (module.js:547:15) at Function.Module._loadFunction.Module._resolveFilename (module.js:547:15) 在 Function.Module._load
【发布时间】:2019-02-09 06:52:37
【问题描述】:

我收到以下错误

Function.Module._resolveFilename (module.js:547:15) at Function.Module._load (module.js:474:25) at Module.require (module.js:596:17) at require (internal/ module.js:11:18) 在对象。 (C:\Users\u8ser\Desktop\Todo\server.js:25:1) 在 Module._compile (module.js:652:30) [nodemon] 应用程序崩溃 - 在启动前等待文件更改

供您参考的 PFB 源代码。

我的 server.js 文件

var express = require("express");
var app = express();
var mongoose = require("mongoose");
var methodOverride = require("method-override");
var port = process.env.PORT || 8080;
var database = require('./config/database');
  var morgan = require("morgan");
var bodyParser = require("body-parser");

mongoose.connect('mongodb://localhost:27017', function(err){
    if (err){
        console.log(err);
    }else{
        console.log("Connected to DB");
    }
});

app.use(express.static(__dirname + '/public'));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json());
app.use(bodyParser.json({ type : 'application/vnd.api+json'}));
app.use(methodOverride());

require('./models/routes')(app);

app.listen(port);
console.log("App listining to port" + port);

我的 routes.js 文件

var Todo = require('./models/todo');

module.exports = function(app){

    app.get('/api/todos', function(req, res){
    Todo.find(function(err, todos){
        if (err)
        res.send(err)

        res.send(todos)

      });
    });

 // create todo and send back all todos after creation

app.post('/api/todos', function(req, res){

    // create a todo, information comes from AJAX request from Angular

    Todo.create({
        text : req.body.text,
        done : false
    }, function(err, todo) {
        if (err)
           res.send(err);

       //get and return all the todos after you create another

       Todo.find(function(err, todos){
           if (err)
               res.send(err)
            res.json(todos);
       });
    });

});

//delete a todo
app.delete('/api/todos/:todo_id', function(req, res){
    Todo.remove({
       _id : req.params.todo_id
    }, function(err, todo){
        if (err)
        res.send(err);

        //get and return all the todos after you create another
        Todo.find(function(err, todos){
            if (err)
            res.send(err)
            res.json(todos);
        });
    });
});


// server.js 
// application -------------------------------------------------------------
app.get('*', function(req, res) {
    res.sendfile('./public/index.html'); // load the single view file (angular will handle the page changes on the front-end)
});

};

请访问github link 获取完整源代码。

【问题讨论】:

  • 在此处获得更好接收效果的专业提示:(1) 将读者需要的所有内容都放在问题本身中; (2) 使用提供的代码格式化工具; (3) 使用简洁的标题来描述您的问题; (4) 避免恳求帮助我。
  • @Think-Twice:这不是我的领域,但您能否建议 Q 作者提供更大的代码示例,并将 GH 链接放在最后(或完全删除它) 从而产生所需的minimal reproducible example?如果可以进行该编辑,则可以重新打开问题。
  • @Roshan 请查看我的编辑并批准。这就是您需要发布问题以快速解决问题并获得社区更好支持的方式。在发布问题方面也请关注其他 cmets。欢迎来到stackoverflow :)

标签: node.js express module node-modules


【解决方案1】:

问题出在 server.js 文件中。尝试以下更新的解决方案

Server.js:

var express = require("express");
var app = express();
var mongoose = require("mongoose");
var methodOverride = require("method-override");
var port = process.env.PORT || 8080;
var database = require('./config/database');
  var morgan = require("morgan");
var bodyParser = require("body-parser");
var routes = require('./app/models/routes');
mongoose.connect('mongodb://localhost:27017', function(err){
    if (err){
        console.log(err);
    }else{
        console.log("Connected to DB");
    }
});

app.use(express.static(__dirname + '/public'));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json());
app.use(bodyParser.json({ type : 'application/vnd.api+json'}));
app.use(methodOverride());

app.use('/api', routes); // you should add base path like this and assign routes

app.listen(port);
console.log("App listining to port" + port);

并且在 routes.js 文件中删除 /api,因为我们在 server.js 中添加了 /api 作为基本路径

var Todo = require('./todo');

module.exports = function(app){

    app.get('/todos', function(req, res){
    Todo.find(function(err, todos){
        if (err)
        res.send(err)

        res.send(todos)

      });
    });

 // create todo and send back all todos after creation

app.post('/todos', function(req, res){

    // create a todo, information comes from AJAX request from Angular

    Todo.create({
        text : req.body.text,
        done : false
    }, function(err, todo) {
        if (err)
           res.send(err);

       //get and return all the todos after you create another

       Todo.find(function(err, todos){
           if (err)
               res.send(err)
            res.json(todos);
       });
    });

});

//delete a todo
app.delete('/todos/:todo_id', function(req, res){
    Todo.remove({
       _id : req.params.todo_id
    }, function(err, todo){
        if (err)
        res.send(err);

        //get and return all the todos after you create another
        Todo.find(function(err, todos){
            if (err)
            res.send(err)
            res.json(todos);
        });
    });
});

// server.js 
// application -------------------------------------------------------------
app.get('*', function(req, res) {
    res.sendfile('./public/index.html'); // load the single view file (angular will handle the page changes on the front-end)
});

};

架构应该按照下面的方式创建,但是你做错了

var mongoose = require('mongoose');
const Schema = mongoose.Schema;
const BlogPost = new Schema({
  text : String,
  done : Boolean
});
module.exports = mongoose.model('Todo', BlogPost);

【讨论】:

  • module.js:549 抛出错误; ^ 错误:在 Function.Module._load (module.js:474:25) 在 Module.require (module. js:596:17) 在 Object. (C:\Users\u8ser\Desktop\Todo\server.js:25:1) 在 Module._compile ( module.js:652:30) [nodemon] 应用程序崩溃 - 在启动之前等待文件更改...
  • 我的错。我在 server.js 中错误地导入了 routes.js,这就是您看到上述错误的原因,现在更正了。更新了我的答案,请检查它现在是否可以使用
  • module.js:549 抛出错误; ^ 错误:在 Function.Module._load (module.js:474:25) 在 Module.require (module. js:596:17) 在 Object. (C:\Users\u8ser\Desktop\Todo\app\models\routes.js:1:74) 处的 require (internal/module.js:11:18) Module._compile (module.js:652:30) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) [nodemon] 应用程序崩溃 - 等待在开始之前进行文件更改...
  • 这是路径问题。您需要更改 var Todo = require('./models/todo'); to var Todo = require('./todo');在 routes.js 文件中解决问题。我更新了我的答案,请尝试一次
  • 还有一个问题请帮忙....我输入“事物”并按下添加新按钮,它们就会消失。
【解决方案2】:

我认为您为 routes.js 文件编写了错误的路径。 试试

require('./app/models/routes')(app);

而不是

require('./models/routes')(app);

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多