快递路线未被识别。回答'无法获得'

时间:2016-08-15 00:51:26

标签: javascript node.js express routes

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'));

./控制器/ index.js

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

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

module.exports = router;

./控制器/ 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 });
    });
});

./控制器/ 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 / site 时,我收到回复说:

  

无法获取/网站

localhost / 效果很好

我已经看了一段时间,但还无法找到问题。如果有什么我可以添加,请告诉我。感谢。

2 个答案:

答案 0 :(得分:2)

感谢评论答案的人:

  

如果您导航到/ site / site会发生什么?您的site.js路线相对于您使用中提供的路线。所以它应该是router.get('/'...而不是router.get('/ site'...

./ controllers / site 路由已被路由到 / site 。最重要的是,我打电话给router.get('/site', ...)。这意味着它实际上是路由到 / site / site

解决方案是仅使用 site.js 文件中的router.get('/', ...)

答案 1 :(得分: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对象的baseUrl属性,除外   req.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