Route.get()需要回调函数,但得到了一个“未定义的对象”

vlurs2pr  于 2022-09-21  发布在  Node.js
关注(0)|答案(6)|浏览(151)

我正在学习做TODO应用程序。在网站上,我学习的是https://coderwall.com/p/4gzjqw/build-a-javascript-todo-app-with-express-jade-and-mongodb

我按照说明打字,

app.js

var main = require('./routes/main');
var todo = require('./routes/todo');
var todoRouter = express.Router();
app.use('/todos', todoRouter);
app.get('/', main.index);
todoRouter.get('/',todo.all);
todoRouter.post('/create', todo.create);
todoRouter.post('/destroy/:id', todo.destroy);
todoRouter.post('/edit/:id', todo.edit);

/routes/todo.js

module.exports ={
  all: function(req, res){
    res.send('All todos');
  },
  viewOne: function(req, res){
    console.log('Viewing '+req.params.id);
  },
  create: function(req, res){
    console.log('Todo created');
  },
  destroy: function(req, res){
    console.log('Todo deleted');
  },
  edit: function(req, res){
    console.log('Todo '+req.params.id+' updated');
  }
};

我收到了这个错误信息

错误:Route.get()需要回调函数,但获得了[未定义的对象]

我是不是错过了什么?

9vw9lbht

9vw9lbht1#

我也犯了同样的错误。调试后,我发现我错误地拼写了从控制器导入到路径文件中的方法名称。请检查方法名称。

zsbz8rwp

zsbz8rwp2#

在本教程中,todo.all返回callback对象。这是router.get语法所必需的。

从文档中:

router.METHOD(路径,[回调,...]回调)

Router.METHOD()方法在Express中提供路由功能,其中方法是HTTP方法之一,如GET、PUT、POST等,小写。因此,实际的方法是router.get()、router.post()、router.put()等等。

您仍然需要在todo文件中定义callback对象的数组,以便可以访问router的适当callback对象。

您可以从教程中看到,todo.js包含callback对象的数组(这是您在编写todo.all时要访问的对象):

module.exports = {
    all: function(req, res){
        res.send('All todos')
    },
    viewOne: function(req, res){
        console.log('Viewing ' + req.params.id);
    },
    create: function(req, res){
        console.log('Todo created')
    },
    destroy: function(req, res){
        console.log('Todo deleted')
    },
    edit: function(req, res){
        console.log('Todo ' + req.params.id + ' updated')
    }
};
ovfsdjhp

ovfsdjhp3#

GET有两条路径:

app.get('/', main.index);
todoRouter.get('/',todo.all);
  • 错误:Route.get()需要回调函数,但得到[Object Unfined]*当route.get没有获得回调函数时引发此异常。正如您在todo.js文件中定义的todo.all,但它无法找到main.index。这就是为什么在本教程后面定义main.index文件后,它就可以工作了。
ulmd4ohb

ulmd4ohb4#

确保

您的文件.js:

exports.yourFunction = function(a,b){
  //your code
}

火柴

App.js

var express = require('express');
var app = express();
var yourModule = require('yourFile');
app.get('/your_path', yourModule.yourFunction);

对我来说,我在复制粘贴一个模块到另一个模块进行测试时遇到了这个问题,需要更改导出。文件顶部的xxxx

vaj7vani

vaj7vani5#

有时你会错过底线。添加此路由器将理解这一点。

module.exports = router;
mwg9r5ms

mwg9r5ms6#

发生在我身上的情况是,我正在导出一个函数,如下所示:

module.exports = () => {
    const method = async (req, res) => {
    }
    return {
        method
    }
}

但我是这样称呼它的:

const main = require('./module');

取而代之的是

const main = require('./module')();

相关问题