2016-08-15 18 views
1

app.jsエクスプレスルートが認識されません。で応答すること

var express = require("express"); 
var app = express(); 
var path = require('path'); 
var db = require('./db'); 
var bodyParser = require('body-parser'); 

app.listen(80); 

app.set('view engine', 'jade'); 
app.set('views', "./views"); 

// app.get('/', _GetMainPage); 
// app.get('/sites', _GetSites); 

app.use(express.static(path.join(__dirname, 'public'))); 
app.use(bodyParser.urlencoded({ extended: true })); // Support encoded bodies 
app.use(bodyParser.json()); // Support json encoded bodies 
app.use(require('./controllers')); 

./controllers/index.js

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

router.use('/', require('./sites')); 
router.use('/site', require('./site')); 

module.exports = router; 

./controllers/sites.js

var express = require('express'); 
var router = express.Router(); 
var site = require('../models/site'); 

router.get('/', function(req, res) { 
    site.getAll(function(err, rows){ 
     if(err) { 
      res.send(err); 
      return; 
     } 

     res.render('sites', { sites : rows }); 
    }); 
}); 
'を取得することはできません'

./c私はローカルホスト/サイトを要求するとontrollers/site.js

var express = require('express'); 
var router = express.Router(); 
var site = require('../models/site'); 

router.get('/site', function(req, res) { 
    // console.log("get /site received. req.body: " + req.body); 
    res.render('site', { 
      site: { 
       name : req.params.name 
      } 
     }); 
}); 

module.exports = router; 

は、私が言って応答を取得:

/サイトに完全に

はlocalhost/作品

を取得することはできません

私はこれをawまだ問題を見つけることができません。私が追加できるものがあれば教えてください。ありがとう。

+2

/site/siteに移動するとどうなりますか?あなたのsite.jsルートは、あなたが使用中に提供したルートからの相対パスです。だから、 'router.get( '/' ...' router.get( '/ site' ... ' –

+0

ではありません。 –

答えて

2

は答えをコメントした人に感謝:

あなたは/サイト/サイトに移動した場合はどうなりますか?あなたのsite.jsルートは、あなたが使用中に提供したルートからの相対パスです。だから、router.getする必要があります( '/' ...( '/' 部位router.getない...

./controllers/siteルートがすでに/サイトにルーティングされています。その上、私はrouter.get('/site', ...)を呼んでいた。これは、それが実際に/サイト/サイトへのルーティングたことを意味します。

ソリューションは、だけではなく、site.jsファイルでrouter.get('/', ...)を使用することです。

0

この本当に助けられた私、ありがとう。

基本的には、サブアプリケーションのルートパスは、app.use()メソッドでマウントするコアアプリケーションで定義されています。

私はapp.mountpathからドキュメントを見つけることができる最良の例はここにある:

https://expressjs.com/en/4x/api.html#express.router

app.mountpathプロパティは、サブアプリが搭載した一つ以上のパスパターンが含まれています。

var express = require('express'); 

var app = express(); // the main app 
var admin = express(); // the sub app 

admin.get('/', function (req, res) { 
    console.log(admin.mountpath); // /admin 
    res.send('Admin Homepage'); 
}); 

app.use('/admin', admin); // mount the sub app 

は REQを除き、REQオブジェクトのbaseUrlにプロパティと同様です。baseUrlは一致したURLパスを返すが、一致するパターンは ではありません。

サブアプリケーションが複数のパスパターンにマウントされている場合、app.mountpath は、次の例の に示すように、マウントされているパターンのリストを返します。

var admin = express(); 

admin.get('/', function (req, res) { 
    console.log(admin.mountpath); // [ '/adm*n', '/manager' ] 
    res.send('Admin Homepage'); 
}); 

var secret = express(); 
secret.get('/', function (req, res) { 
    console.log(secret.mountpath); // /secr*t 
    res.send('Admin Secret'); 
}); 

admin.use('/secr*t', secret); // load the 'secret' router on '/secr*t', on the 'admin' sub app 
app.use(['/adm*n', '/manager'], admin); // load the 'admin' router on '/adm*n' and '/manager', on the parent app