Javascript Node/Express:根和#x27的路由标识符/';路线

Javascript Node/Express:根和#x27的路由标识符/';路线,javascript,node.js,express,routes,requirejs,Javascript,Node.js,Express,Routes,Requirejs,我正在开发一个目录应用程序,其中内容根据一些参数呈现在服务器端。我的目录是在appache上运行的其他应用程序的子应用程序。我使用反向代理在需要时重定向到节点 因此,我的节点根路由是:http://myapp.com/directory/ 我需要有这种格式的路由:http://maypp.com/directory/location/category 在哪里,, 位置和类别可以是任何东西!(它是用户生成的内容) 我最初的想法是我可以做这样的事情: app.get('/:location?/:ca

我正在开发一个目录应用程序,其中内容根据一些参数呈现在服务器端。我的目录是在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
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
script(type="text/javascript", src="/directory/components/requirejs/require.js" data-main="/directory/js/main")
浏览器输出中断,出现以下错误:

Uncaught SyntaxError: Unexpected token < main.js:1
和上面在浏览器端的内容相同

在我的
layout.jade
中,我有以下内容:

location: css, category: main.css
GET /components/modernizr/modernizr.js 200 69ms - 48.97kb
GET /components/requirejs/require.js 200 69ms - 80.75kb
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
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);
位置:css,类别:main.css


这和您的一些错误是因为您的静态内容、css和js处理程序未设置为在app.router之前执行。express中中间件的排序必须仔细考虑并精确。因此,首先要确保中间件顺序正确,以便在app.router之前处理所有静态CSs、JS、图像等。

你说得对!谢谢!由于我组织路线的方式,我有以下
var routes=require('./routes')(app),这是在静态资产处理之前调用的。我刚把它移下来,所以它在app.router之后!现在它开始工作了。