Express.js中的默认路由
我正在写一个应用程序与node.js和expression。
我已经设置了一个默认路由,如下所示:
app.get('/', function(req, res){ res.sendfile('./views/index.html'); });
当我goto / localhost:port /
但在URL后面input任何东西时,/ localhost:port / blah我得到了404错误,这是有道理的。
我想设置一个默认路由,这样无论我在localhost:port /后面input什么URL,它都应该得到相同的html文件。
我试着改变/ *:
app.get('*', function(req, res){ res.sendfile('./views/index.html'); });
但是当我这样做后,我开始在控制台中得到这个错误,什么也没有显示:
未捕获的SyntaxError:意外的标记<
在我所有的Javascript文件中::3000 / scripts / myscript.js:1
不知何故,我的JavaScript文件显示HTML的内容
===编辑====
我用这个,它为一级url工作正常:像loclhost:端口/等等
app.use(function(req, res){ res.sendfile('./views/index.html'); });
但是当URL是多层时,我看到与前面描述相同的问题localhost:port / blah / foo这里的问题是路由器正在寻找/ blah文件夹下的所有JavaScript和CSS文件的公共目录,这样做不存在。 它将返回默认的HTML文件。 我该如何解决?
==================编辑张贴整个代码=========================== ==============
var http = require('http'); var express = require('express'); var api = require('./routes/api'); var mongoose = require('mongoose'); var app = express(); mongoose.connect('mongodb://localhost/mydb'); app.set('port', process.env.PORT || 3000); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router); app.use(express.static(__dirname + '/public')); app.get('/api/user/:userid', api.getUserInfo); app.get('/', function(req, res){ res.sendfile('./views/index.html'); }); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
除此之外,我有一个链接在其中的myscript的HTML,
<script type="text/javascript" src="./scripts/myscript.js" ></script>
如上所述,您可以在路由逻辑之后添加这个中间件:
app.use(function(req, res){ res.send(404); });
你可能会发现这个答案也很有用。
当然,您需要调整res.send()
部分以满足您的需求。
希望能帮助到你。
在之前的所有路线之后添加此路线
app.get('*',function (req, res) { res.redirect('/'); });
这会将任何未处理的路由redirect到索引“/”
随着更新版本的快递,我build议使用res.sendStatus作为res.send已被弃用。
Express v3
app.use(function(req, res){ res.send(404); });
Express v4
app.use(function(req, res){ res.sendStatus(404); });