2015-06-12 11 views
2

Так что я пытаюсь отделить мои входа маршруты в отдельный файл JS называется login_routes.jsRouter.use требует промежуточного программного обеспечения?

Я получаю эту конкретную ошибку:

TypeError: Router.use() requires middleware function but got a Object at Function. (/Users/ethanthomas/Desktop/mean-stuff/express-server/node_modules/express/lib/router/index.js:446:13)

Не совсем понимая, что это просит меня implement?

login_routes.js:

var express = require('express'); 
var app = express(); 

app.route('/login') 

.get(function(req, res, next) { 
    res.send('this is the login form'); 
}) 

.post(function(req, res, next) { 
    console.log('processing'); 
    res.send('proccessing the login form!'); 
}); 

server.js:

var express = require('express'); 
var app = express(); 
var path = require('path'); 
var adminRoutes = require('./app/routes/admin_routes'); 
var loginRoutes = require('./app/routes/login_routes'); 

app.use('/admin', adminRoutes); 
app.use('/login', loginRoutes); 


//send our index.html file to the user for the home page 
app.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/index.html')); 
}); 

//start the server 
app.listen(1337); 
console.log('leet is the magic port'); 
+0

'вар adminRoutes = требуется (» ./ приложение/маршруты/admin_routes'); 'является объектом, и вы не можете передать его в' app.use'. Вам нужно передать функцию, аналогичную тому, что вы делаете для маршрута '/' в файле 'server.js'. – Jayesh

+1

вы никогда не экспортировали маршрутизатор из ** login_routes.js **. –

+0

Как я могу это сделать? Довольно новичок в стеке JS/MEAN. – user3649245

ответ

0

сделать как это:

login_routes.js:

exports.get = function(req, res) { 
    res.send('this is the login form'); 
}; 

exports.post = function(req, res) { 
    console.log('processing'); 
    res.send('proccessing the login form!'); 
}; 

server.js:

var loginRoutes = require('./app/routes/login_routes'); 

app.get('/login', loginRoutes.get); 
app.put('/login', loginRoutes.post); 
+0

Это не делает то же самое. Во-первых, вы разделяете 'GET' и' POST' на два отдельных маршрута, и вместо экспорта двух символов достаточно экспортировать 'app'. – robertklep

+0

Я бы хотел использовать методы get/post только в /login...any идеях? – user3649245

+0

@ user3649245 Я отредактировал свой ответ для одного и того же маршрута '/ login' для получения и публикации. – Jayesh

3

Люди уже предложили намеки на решение в комментариях.

Первая проблема заключается в том, что вам нужно экспортировать ваше приложение «sub» с login_routes.js. Чтобы сделать это, изменить это:

var app = express(); 

в этом:

var app = module.exports = express(); 

Во-вторых, вы, вероятно, непреднамеренно создавать маршруты для GET /login/login и POST /login/login. Чтобы решить эту проблему, используйте это в login_routes.js:

app.route('/').get(...).post(...); 

Это происходит потому, что путь к корню в вашем приложении к югу (тот, в login_routes.js) получит карту на пути, используемого в app.use() в главном приложении (server.js).

+0

Второе заявление помогло мне, спасибо! Я не знал о картировании: D – optional

5

Ваш login_routes.js должен выглядеть примерно так (в контексте экспресс):

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

 
// GET request to /login 
 
router.get('/', function(req, res, next) { 
 
    // do something 
 
}); 
 

 
// POST request to /login 
 
router.post('/', function(req, res, next) { 
 
    // do something 
 
}); 
 

 
module.exports = router;

В вашей app.js вы используете

var login_routes = require('./login_routes'); 
 
... 
 
app.use('/login', login_routes); 
 
...

Посмотрите на код, созданный модулем express-generator. Это отправная точка для экспресс-приложений для веб-серверов.

0

login_routes.ЯШИ:

var express = require('express'); 
var app = express(); 

app.route('/login') 

.get(function(req, res, next) { 
    res.send('this is the login form'); 
}) 

.post(function(req, res, next) { 
    console.log('processing'); 
    res.send('proccessing the login form!'); 
}); 

module.exports = router; 

только предписание module.exports = router тогда он будет работать

Смежные вопросы

 Смежные вопросы