Подтвердить что ты не робот

Экспресс-маршруты:.get() требует функций обратного вызова, но получил объект [object Object]

Хорошо, это должно быть легко для кого-то указать.

Я проверил другие подобные вопросы, и никто не помог.

Я пытаюсь переместить все мои маршруты в отдельный файл routes.js. В нем я:

module.exports = function (app) {

  var user = {
      list : require('./routes/user.js')
    } 
  , index = {
      index : require('./routes/index.js')
    } 


  app.get('/', function(request, response){
    response.send('You made it to the home page.')
  });

  app.get('/users', user.list);
}

И в моем app.js файле у меня есть следующее:

var register_routes = require('./routes.js')
register_routes(app)

Мой индексный маршрут работает нормально, но он возвращается на app.get('/users', user.list); с этой ошибкой:

.get() требует функций обратного вызова, но имеет объект [object Object]

Это экспресс-приложение из ящика, поэтому их не так много описать.

Спасибо.

EDIT: по запросу, вот что находится в ./routes/user.js:

exports.list = function(req, res){
  res.send("respond with a resource");
};
4b9b3361

Ответ 1

Вы экспортируете объект с ключом list, который имеет вашу функцию как значение.

Итак, чтобы получить доступ к вашей функции, вам нужно будет сделать это require('./routes/user.js').list

Или с кодом user.list.list.

Чтобы решить эту проблему, у вас есть две возможности.

Либо напишите:

var user = {
  list : require('./routes/user.js').list
}

Или:

module.exports = function(req, res){
   res.send("respond with a resource");
};

ИЗМЕНИТЬ

Если ваш routes/user.js, вероятно, позже будет выглядеть следующим образом:

module.exports.list = function(req, res){
   res.send("respond with a resource");
};

module.exports.delete = function(req, res){
   res.send("delete user");
};

Если да, вы можете просто написать его таким образом в своем routes.js:

var user = require('./routes/user.js');

Ответ 2

Я думаю, что вы хотите:

module.exports = function (app) {

  var user = {
      list : function(request, response){  
                    require('./routes/user.js');
            } 
}
    } 
  , index = {
      index : function(request, response){ 
          require('./routes/index.js') 
        }
    } 


  app.get('/', function(request, response){
    response.send('You made it to the home page.')
  });

  app.get('/users', user.list);
}

Таким образом, вы получите обратный вызов маршрута, и этот обратный вызов выполнит запрос.

Ответ 3

Если вы используете маршрутизатор в своем приложении для всех целей маршрутизации,

var express = require('express');
var router = express.Router();

var index = require('./index');


/* GET home page. */
router.get('/', index.list);

module.exports = router;

то в файле index.js просто сделайте

router.list = function(req, res){
   res.send("respond with a resource"); 
};