2016-05-11 4 views
0

Я пытаюсь создать api в nodejs.Узел Js routing не работает

Мой файл server.js следит за

var http = require('http'), 
    path = require('path'), 
    async = require('async'), 
    socketio = require('socket.io'), 
    express = require('express'), 
    session = require('express-session'), 
    logger = require('morgan'), 
    bodyParser = require('body-parser');  

var app = express(); 
var server = http.createServer(app); 
var io = socketio.listen(server); 
    app.use(logger('dev')); 
    app.use(bodyParser.json()); 

    app.all('/*', function(req, res, next) { 
    // CORS headers 
    res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    // Set custom headers for CORS 
    res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key'); 
    if (req.method == 'OPTIONS') { 
     res.status(200).end(); 
    } else { 
     next(); 
    } 
    }); 
    app.all('/api/*', [require('./middlewares/validateRequest')]); 
    //app.use(express.static(path.resolve(__dirname, 'client'))); 

    app.use('/', require('./routes')); 

    // If no route is matched by now, it must be a 404 
    app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
    });   

var messages = []; 
var sockets = []; 

...... 
server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function(){ 
    var addr = server.address(); 
    console.log("Meeting Panel listening at", addr.address + ":" + addr.port); 
}); 

мои/маршруты реж имеющих index.js файл

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

var auth = require('./auth.js'); 
var meetings = require('./meetings.js'); 
var user = require('./users.js'); 

/* 
* Routes that can be accessed by any one 
*/ 
router.post('/login', auth.login); 


/* 
* Routes that can be accessed only by authenticated & authorized users 
*/ 
router.get('/api/admin/users', user.getAll); 
..... 
..... 

module.exports = router; 

Теперь, когда я открыть страницу/входа в систему, то я получаю следующее сообщение об ошибке

Error: Not Found 
    at /home/ubuntu/workspace/server.js:46:15 
    at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13) 
    at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12) 
    at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10) 
    at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:618:15 
    at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:256:14) 
    at Function.handle (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:176:3) 
    at router (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:46:12) 
+0

Что находится в строке 46 в server.js? – JimmyRare

+0

ошибка 404 кода -> var err = новая ошибка («не найдена»); –

ответ

1

Ваш маршрут по адресу /login определен по методу POST. Если вы хотите открыть его из браузера (я полагаю, это то, что вы делаете), вы должны определить router.get('/login'.... Я думаю, вы не хотите, чтобы маршрут /login определялся методом GET, поэтому ваш другой хороший вариант для тестирования - нажать /api/admin/users.

1

Если вы только что открыли http://example/login в своем браузере, он будет получать запрос, так что в этом случае он не найдет маршрут, потому что вы слушаете пост/логин, не получаете/не заходите.