Express.js中的默认路由

时间:2014-03-26 21:15:13

标签: javascript node.js express url-routing

我正在用node.js和express编写应用程序。

我已经设置了默认路线:

app.get('/', function(req, res){
  res.sendfile('./views/index.html');
});

当我转到/ localhost:port /

时这很好用

但是在我输入任何内容之后的URL中,/ localhost:port / blah我得到了404 ERROR,这是有意义的。

我想设置一个默认路由,这样无论我在localhost:port /之后输入的是什么,它都应该返回相同的html文件。

我尝试将/更改为*:

app.get('*', function(req, res){
  res.sendfile('./views/index.html');
});

但是在我这样做之后,我开始在控制台中收到此错误并且没有显示任何内容:

未捕获的SyntaxError:意外的令牌<

在我的所有Javascript文件中:: 3000 / scripts / myscript.js:1

不知怎的,我的javascript文件显示了HTML的内容

=== EDIT ====

我使用了它,它适用于第一级网址:如loclhost:port / blah

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>

3 个答案:

答案 0 :(得分:19)

在所有之前路线的之后添加此路线

#image

这会将未处理的任何路线重定向到索引&#34; /&#34;

答案 1 :(得分:14)

如上所述here,您可以在路由逻辑之后添加此中间件:

   app.use(function(req, res){
       res.send(404);
   });

您可能会发现this answer也很有用。

当然,您需要调整res.send()部分以满足您的需求。

希望它有所帮助。

答案 2 :(得分:3)

对于较新版本的express,我建议使用res.sendStatus,因为res.send已被弃用。

Express v3

app.use(function(req, res){
   res.send(404);
});

Express v4

app.use(function(req, res){
   res.sendStatus(404);
});