📜  Node.js 处理无效路由

📅  最后修改于: 2022-05-13 01:56:23.823000             🧑  作者: Mango

Node.js 处理无效路由

在开发 Node.Js 应用程序时,处理无效路由很重要。
可以通过编写自定义路由或将所有无效路由重定向到任何自定义页面来完成。

    让我们开发一个简单的 nodejs 服务器来处理无效路由:
  • 第一步:创建项目文件夹
    为无效路线项目创建一个单独的文件夹。
  • 第 2 步:创建 package.json
    Package.json 将通过在终端或命令提示符中键入以下命令来创建:
    npm init -y
  • 第 3 步:在项目的根目录上创建一个 javascript 文件:
  • 第 4 步:使用 express 创建一个简单的服务器:
    // importing express package for creating the express server
    const express = require('express'); 
    const app = express(); // creating an express object
      
    const port = 8000; //setting server port to 8000
      
    // for mounting static files to express server
    app.use(express.static(__dirname+'public/'));
      
    // listening server
    app.listen(port, function (err) {
        if(err){
            console.log("error while starting server");
        }
        else{
            console.log("server has been started at port "+port);
        }
    })
    
  • 第 5 步:定义路线
    app.get('/', function (req, res) {
        res.send("Ashish")
    })
    
    app.get('/geeksforgeeks', function (req, res) {
        res.sendFile(__dirname+'/public/geeksforgeeks.html')
    })
    

现在,我们将通过终端或命令提示符中的以下命令启动我们的服务器:

node server.js

如果您的系统中安装了 nodemon,那么也可以使用以下链接来完成:
想了解更多关于 nodemon 以及如何使用它,请参考:这个

nodemon server.js

到目前为止,在我们的项目中,我们已经开发了两条路线:

  • 根路由(/)
    该路由将在http://localhost:8000/访问
  • Geeksforgeeks 路线(/geeksforgeeks)
    该路由将在http://localhost:8000/geeksforgeeks 访问

现在,让我们尝试访问未在服务器文件中定义的不同随机路由。

如屏幕截图所示,我们在尝试访问 /india 路由时遇到错误。

编写自定义路由来处理所有无效路由:
我们将为所有无效路由添加一个路由,如下所示:

app.get(‘*’, function(req, res){
res.sendFile(__dirname+’/public/error.html’);
}

现在,更新的服务器文件将如下所示:

// importing express package for creating the express server
const express = require('express'); 
const app = express(); // creating an express object
  
const port = 8000; // setting server port to 8000
  
  
app.use(express.static(__dirname+'/public'));
  
// creating routes
app.get('/', function (req, res) {
    res.send("Ashish")
})
  
app.get('/geeksforgeeks', function (req, res) {
    res.sendFile(__dirname+'/public/geeksforgeeks.html')
})
  
app.get('*', function (req, res) {
    res.sendFile(__dirname+'/public/error.html');
})
  
  
// listening server
app.listen(port, function (err) {
    if(err){
        console.log("error while starting server");
    }
    else{
        console.log("server has been started at port "+port);
    }
})

让我们尝试访问我们遇到的相同印度路线无法获取/印度错误

为此,网址将是: http://localhost:8000/india

现在,如果我们尝试访问任何随机的无效或错误路由,我们将得到如上所示的错误页面。

    要记住的要点:
  • 无效路由的路由应该放在所有路由的最后,因为路由是按照写入的顺序调用的。
  • 如果我们将这条路线写在起点或中间某处,那么在这条路线之后写的所有路线都将不起作用,并将被重定向为无效路线处理。

让我们通过一个例子来理解这一点:
我们在这里改变路线的顺序

// importing express package for creating the express server
const express = require('express'); 
const app = express(); // creating an express object
  
const port = 8000; // setting server port to 8000
  
  
app.use(express.static(__dirname+'/public'));
  
// creating routes
app.get('*', function (req, res) {
    res.sendFile(__dirname+'/public/error.html');
})
  
app.get('/', function (req, res) {
    res.send("Ashish")
})
  
app.get('/geeksforgeeks', function (req, res) {
    res.sendFile(__dirname+'/public/geeksforgeeks.html')
})
  
  
  
  
// listening server
app.listen(port, function (err) {
    if(err){
        console.log("error while starting server");
    }
    else{
        console.log("server has been started at port "+port);
    }
})

现在,我们将在访问任何在代码中定义或未定义的路由时获得无效路由响应,因为我们正在处理 server.js 顶部的无效路由

因此,有必要在所有路由的末尾写上自定义路由,以免干扰任何其他路由的函数。

这样我们就可以处理nodejs中的Invalid routes访问了。