簡體   English   中英

Express.js 中的默認路由

[英]Default route in Express.js

我正在用 node.js 和 express 編寫一個應用程序。

我已經設置了一個默認路由:

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

當我轉到 /localhost:port/ 時,這工作正常

但是在 URL 之后,當我輸入任何內容時, /localhost:port/blah 我得到 404 ERROR,這是有道理的。

我想設置一個默認路由,這樣無論我在 localhost:port/ 之后輸入什么 URL,它都應該返回相同的 html 文件。

我嘗試將 / 更改為 * :

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

但在我這樣做之后,我開始在控制台中收到此錯誤,但沒有任何顯示:

未捕獲的語法錯誤:意外的標記 <

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

我的 javascript 文件以某種方式顯示了 HTML 的內容

===編輯====

我使用了這個,它對第一級 url 工作正常:比如 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>

如前所述在這里,你可以只是你的路由邏輯后添加此中間件:

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

您可能會發現此答案也很有用。

當然,您需要調整res.send()部分以滿足您的需求。

您之前的所有路線之后添加此路線

app.get('*',function (req, res) {
        res.redirect('/');
    });

這會將任何未處理的路由重定向到索引“/”

對於較新版本的 express,我建議使用 res.sendStatus,因為 res.send 已被棄用。

Express v3

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

快遞 v4

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM