我正在开发一个目录应用程序,其中内容根据某些参数呈现在服务器端。我的目录是在appache上运行的其他应用程序的子应用程序。我在需要时使用反向代理重定向到节点。
因此,我的节点根路由是:http://myapp.com/directory/
我需要这种格式的路线:http://maypp.com/directory/location/category
其中, 位置和类别可以是任何东西! (这是用户生成的内容)
我最初的想法是,我可以做这样的事情:
app.get('/:location?/:category?', routes.index);
但是,我得到以下行为:
在我渲染视图后的routes.index
中
console.log('location: ' + req.params.location + ', category: ' + req.params.category);
当我导航到http://maypp.com/directory/
时,我得到以下内容:
location: css, category: main.css
GET /components/modernizr/modernizr.js 200 69ms - 48.97kb
GET /components/requirejs/require.js 200 69ms - 80.75kb
浏览器输出因以下错误而中断:
Uncaught SyntaxError: Unexpected token < main.js:1
最奇怪的是,main.js包含呈现的HTML页面,而不是我的浏览器端js模块。
另一个测试案例:
当我导航到http://maypp.com/directory/loc/cat
时,我得到以下内容:
location: loc, category: cat
location: css, category: main.css
GET /components/modernizr/modernizr.js 200 6ms - 48.97kb
GET /components/requirejs/require.js 200 6ms - 80.75kb
location: js, category: main.js
与浏览器方面的内容相同。
在我layout.jade
我有以下内容:
script(type="text/javascript", src="/directory/components/requirejs/require.js" data-main="/directory/js/main")
如果我的路线定义没有第二个标识符(比如app.get('/:location?', routes.index);
),它可以正常工作,但这不是我需要的!
======回答=========
移动了静态资产处理中间件下面的所有路由处理。
var app = express();
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.set('view options', {layout: true});
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.responseTime());
app.use(express.errorHandler());
app.use(express.responseTime());
app.use(require('prerender-node'));
app.use(express.static(path.join(__dirname, '../../public')));
app.use(app.router);
var routes = require('./routes')(app);
答案 0 :(得分:0)
location:css,category:main.css
这个和你的一些错误是因为静态内容,css和js的处理程序没有设置为执行BEFORE app.router。快递中的中间件订购必须仔细思考和精确。因此,首先要使中间件订单正确,以便在app.router之前处理所有静态CS,JS,图像等。