2017-01-18 8 views
1

Я хочу следовать ниже структуры файла, чтобы отделить мои роли от основного app.js Я пробовал api/user/ пост api, который возвращает 404, любая идея, как я могу исправить эту проблему, используя нижерасположенную структуру файла?Как настроить экспресс-маршруты отдельно от основного файла?

./app.js

var express  = require('express'); 
var app   = express(); 
var bodyParser  = require('body-parser'); 
var db = require('./config/db'); 
var port = process.env.PORT || 8080; 
app.use(require('./app/routes')); 
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(methodOverride('X-HTTP-Method-Override')); 
app.use(express.static(__dirname + '/public')); 
function startServer() { 
    server.listen(port, function() { 
    console.log('Express server listening on %d, in %s mode', port, app.get('env')); 
    }); 
}    
setImmediate(startServer); 

// expose app   
exports = module.exports = app; 

./app/routes.js

./app/api/user/index.js

var express = require('express'); 
var controller = require('./user.controller'); 

var router = express.Router(); 

router.get('/', controller.index); 
router.post('/',controller.create); 


module.exports = router; 

Ошибка

angular.js: 12410 POST http: //localhost:8080/api/user 404 (Not Found) 
    (anonymous) @ angular.js: 12410 
p @ angular.js: 12155(anonymous) @ angular.js: 11908(anonymous) @ angular.js: 16648 
$eval @ angular.js: 17972 
$digest @ angular.js: 17786 
$apply @ angular.js: 18080(anonymous) @ angular.js: 26749 
cg @ angular.js: 3613 
d @ angular.js: 3601 
angular.js: 14328 Possibly unhandled rejection: { 
    "data": "Cannot POST /api/user\n", 
    "status": 404, 
    "config": { 
     "method": "POST", 
     "transformRequest": [null], 
     "transformResponse": [null], 
     "jsonpCallbackParam": "callback", 
     "url": "/api/user", 
     "data": { 
      "firstName": "John", 
      "lastName": "Zhang" 
     }, 
     "headers": { 
      "Accept": "application/json, text/plain, */*", 
      "Content-Type": "application/json;charset=utf-8" 
     } 
    }, 
    "statusText": "Not Found" 
} 

ответ

2

Путь, вы определили маршрут в index.js и установлен в routes.js, это даст 404 для /api/user, потому что, когда он ищет в index.js/, он находит только /api/users только что доступен /api/user/api/users.

Вы можете попытаться смонтировать user маршрутизатор /api/user и может определить / маршрут index.js

./app/api/user/index.js

var express = require('express'); 
var controller = require('./user.controller'); 

var router = express.Router(); 

//GET /api/user 
router.get('/', controller.index); 

//POST /api/user 
router.post('/',controller.create); 

module.exports = router; 

./app/routes .js

module.exports = function(app) { 

    //ANY /api/* 
    app.use('/api/user', require('./api/user')); 

    app.route('*') 
    .get(function(req, res) { 
     // res.sendFile('./public/views/index.html'); 
     res.sendfile('./public/views/index.html'); 
    }); 
    }; 

Надеюсь, это поможет вам.

Update

У вас есть еще одна проблема в вашем коде. В вашем app.js, вы определили app.use(require('./app/routes'));, а routes.js - function(app).

Изменить эту строку в

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

И добавьте эту строку после app.use(express.static(__dirname + '/public'));

+0

Я сделал изменение в соответствии с вашим ответом, я получил сообщение об ошибке, что я обновил вопрос, пожалуйста, взгляните. Похоже, нам нужно исправить 'app.js'. – hussain

+0

проверьте обновленный ответ. –

+0

Большое вам спасибо за решение моей проблемы, я боролся за дни ... – hussain

0

Вашей проблемы беспокойства ваших требует/импорта .. Первой попытку получить доступ с нормальным маршрутом в вашем app.js файл

+0

Спасибо за ответ! Можете ли вы потратить время, чтобы привести пример? Это сделает ваш ответ намного лучше. – VladFr