2017-01-18 5 views
1

メインファイルからファイルを切り離すためにファイル構造に従いたいapp.jsapi/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に取り付けられていることがindex.js/を検索するとき、それが唯一の/api/user/api/usersからアクセス可能である/api/usersだけ見つけたので、それは、/api/userため404を与えるだろう。

あなたは/api/useruserルータを設置しようとすることができると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'); 
    }); 
    }; 

それがあなたを助けることを願っています。

更新

あなたはあなたのコード内の別の問題が発生しています。 app.jsでは、app.use(require('./app/routes'));と定義し、routes.jsfunction(app)と定義しました。

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

にラインと、あなたが必要とapp.use(express.static(__dirname + '/public'));

+0

私はあなたの答えに応じて変更を加えました。私は問題が更新されたので、エラーが出ました。見てください。私たちは 'app.js'を修正する必要があるようです。 – hussain

+0

更新された答えを確認してください。 –

+0

私の問題を解決してくれてありがとう、私は数日間苦労しています... – hussain

0

あなたの問題を懸念した後、その行を追加します

変更/輸入が...まず、あなたのapp.jsが

ファイルで、通常のルートとのアクセスを取得しよう
+0

お返事ありがとう!あなたは時間をかけて例を挙げることができますか?これはあなたの答えをより良くするでしょう。 – VladFr

関連する問題