node.js限制一个路由,所以它可以用jquery加载,但不能通过url访问

我有一个单一的页面应用程序,使用jQuery加载页面中的HTML块。 在我的服务器上有这些块的路由设置。 然而,如果我的路线之一(例如:/ signIn)被直接input到我的url之后,那么这个html块会被加载到页面上(mySite.com/signIn)。

我怎样才能发送一个404错误代码的url后input的任何path,但仍然允许使用jquery调用路线(它的意图)?

谢谢!

编辑:
谢谢你的答案! 这是我写的代码,如果有人愿意使用它。 它redirect任何请求,而不是从jquery加载,到主页。 然而,它允许任何带有扩展的path被加载(如js和css),除非它们被input到url中,隐藏你的样式表,javascript和图像。

//Prevent url path entry app.get('*', function (req, res, next) { //Check for extension if (/\.\w*$/.test(req.url)) { //headers['accept'] is comma separated, get the first value var splitPath = req.headers['accept'].split(','); //If first entry is text/html then it was requested in the url, Redirect! if ( splitPath[0] == 'text/html' ) { res.redirect('/'); } else { next(); } } //If headers['x-requested-with'] is null then it wasn't requested by jQuery, Redirect! else if (req.headers['x-requested-with'] == null) { res.redirect('/'); } else { next(); } }); 

你想阻止任何非AJAX请求。 JQuery和其他库将以下HTTP头添加到ajax请求中:

X-Requested-With:XMLHttpRequest

你应该在服务器端检查这个。 如果它不存在,那么你可以返回你想要的任何状态。

对于纯数据路由,您可以在$.ajaxdata字段中添加一个简短的标记,或者使用任何工具进行调用。

在服务器端,在数据路由上,您可以检查req.body (如果使用express),然后根据存在或不存在发送响应。

最简单的方法可能只是检查任何标记值,而不需要validation它。

最难的方法是服务器生成并发送会话令牌给客户端,用来获取html模板部分(或返回404)。

如果您使用的是典型的基于连接或快速的中间件,为什么不以不同的方式处理GET和POST请求呢? 来自URL栏的请求将始终是GET请求,所以让那些返回一个404指定的path。 然后正确处理POST请求,并确保jQuery请求正在使用POST调用。