Node.js Function.Module.\u在Function.Module.\u load处解析文件名(Module.js:547:15)

Node.js Function.Module.\u在Function.Module.\u load处解析文件名(Module.js:547:15),node.js,express,module,node-modules,Node.js,Express,Module,Node Modules,我得到以下错误 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)at Object。(C:\Users\u8ser\Desktop\Todo\server.js:25:1)在模块上。_compile(Module.js:6

我得到以下错误

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)at Object。(C:\Users\u8ser\Desktop\Todo\server.js:25:1)在模块上。_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);
My 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)
});

};

请访问此获取完整的源代码。

问题在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);

我认为你写的routes.js文件路径不正确。 试一试

而不是

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

module.js:549抛出错误;^错误:在Function.module处找不到模块“./models/routes”。\u在Function.module处解析文件名(module.js:547:15)。\u在Object处的require(internal/module.js:11:18)处加载(module.js:474:25)在module.require(module.js:596:17)处加载。(C:\Users\u8ser\Desktop\Todo\server.js:25:1)在模块上。_compile(Module.js:652:30)[nodemon]应用程序崩溃-在启动之前等待文件更改…我的坏消息。我在server.js中错误地导入了routes.js,这就是为什么您会看到上面的错误,现在就更正了。更新了我的答案,请检查它是否能正常工作module.js:549 throw err;^错误:在Function.module中找不到module.\u在Function.module中解析文件名(module.js:547:15).\u在module.require(module.js:596:17)中加载(module.js:474:25)在require(internal/module.js:11:18)在对象中加载(module.js:474:25)。(C:\Users\u8ser\Desktop\Todo\app\models\routes.js:1:74)在Module.Module.编译(Module.js:652:30)在Object.Module.扩展名..js(Module.js:663:10)在Module.load(Module.js:565:32)[nodemon]应用程序崩溃-在启动之前等待文件更改…这是路径问题。您需要更改var Todo=require('./models/Todo');to var Todo=require('./Todo');在routes.js文件中修复该问题。我更新了我的答案,请再试一次。还有一个问题,请帮助……我输入“things”,然后按Add New(添加新的)按钮,它们就消失了。Pro提示:这里有更好的接收效果:(1)将读者需要的一切都放在问题本身中;(2) 使用提供的代码格式化工具;(3) 使用简洁的标题描述你的问题;(4) 请不要帮我辩护。@三思:这不是我的领域,但你能建议Q作者提供更大的代码样本,并将GH链接放在末尾(或完全删除),以便生成所需的代码吗?如果可以进行编辑,问题可以重新打开。@Roshan请查看我的编辑并批准。这就是您需要发布问题的方式,以便快速解决问题并获得社区的更好支持。请在发布问题时也关注其他人的评论。欢迎来到stackoverflow:)
require('./models/routes')(app);