Экспресс-маршруты:.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");
};
Ответы
Ответ 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");
};