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 / 效果很好
我已经看了一段时间,但还无法找到问题。如果有什么我可以添加,请告诉我。感谢。
答案 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