Nodejs express如何注册路由?

Nodejs express如何注册路由?

app.routes = {
get:[
{ path:’/’,
method:‘get’,
callbacks:[routes.index],
keys:[],
regexp:/^//?$/i },
{ path:’/users/:id’,
method:‘get’,
callbacks:[user.list],
keys:[Object],
regexp:/^/users/(?:([^/]+?))/?$/i }
],
post:[
{ path:’/login’,
method:‘post’,
callbacks:[login.login],
keys:[],
regexp:/^/login/?$/i }
] };

我是上面这样写的,不好用,所有页面都是404,按照下面写法可以用,为什么?

app.get('/', routes.index);
app.get('/users/:id', user.list);
app.post('/login', login.login);

3 回复

Node.js Express 如何注册路由?

在使用 Node.js 和 Express 框架时,注册路由是一个非常基础且重要的步骤。正确的路由配置可以让您的应用响应客户端的请求并返回相应的数据。以下是两种不同的路由注册方式及其对比。

不推荐的方式

首先,我们来看一下你提供的第一种方式,这种方式可能不适用的原因是它试图直接操作 app.routes 对象。这种方法并不符合 Express 的官方文档和最佳实践,并且可能会导致一些不可预料的行为,比如 404 错误。

app.routes = {
    get: [
        { 
            path: '/',
            method: 'get',
            callbacks: [routes.index],
            keys: [],
            regexp: /^\/\/?$/i 
        },
        { 
            path: '/users/:id',
            method: 'get',
            callbacks: [user.list],
            keys: [Object],
            regexp: /^\/users\/(?:([^\/]+?))\/?$/i 
        }
    ],
    post: [
        { 
            path: '/login',
            method: 'post',
            callbacks: [login.login],
            keys: [],
            regexp: /^\/login\/?$/i 
        }
    ]
};

推荐的方式

下面是更推荐的路由注册方式,这种方式更加直观和简洁,也更容易理解:

// 注册 GET 路由
app.get('/', routes.index);
app.get('/users/:id', user.list);

// 注册 POST 路由
app.post('/login', login.login);

解释

  1. app.get()app.post() 方法是 Express 提供的用于注册 HTTP 请求的方法。app.get() 用于处理 GET 请求,而 app.post() 用于处理 POST 请求。
  2. 第一个参数是路径(如 '/''/users/:id'),第二个参数是处理该路径的回调函数(如 routes.indexuser.listlogin.login)。
  3. 使用这种方式,Express 会自动根据请求方法(GET 或 POST)和路径来匹配对应的路由处理函数,从而避免了手动管理复杂的路由对象。

通过上述推荐的方式,您可以更清晰地定义路由,并且能够避免一些潜在的问题,例如 404 错误。


这样用确实不好用。express的文档说 app.routes 是用来 introspection。直接定义 app.routes 省略了路由的处理部分。还是得用 app.get, app.post。

你当前的路由注册方式存在问题。Express 提供了简化的方式来注册路由,而不需要手动处理正则表达式或回调函数列表。你可以直接使用 app.get, app.post 等方法来注册路由。

示例代码

const express = require('express');
const app = express();

// 定义路由处理函数
const routes = {
    index: (req, res) => {
        res.send('Welcome to the home page');
    },
};

const user = {
    list: (req, res) => {
        const userId = req.params.id;
        res.send(`User details for ID: ${userId}`);
    },
};

const login = {
    login: (req, res) => {
        res.send('Login route');
    },
};

// 使用 app.get 和 app.post 方法注册路由
app.get('/', routes.index);
app.get('/users/:id', user.list);
app.post('/login', login.login);

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 导入 Express:

    • 首先需要导入 Express 模块。
  2. 定义路由处理函数:

    • 在一个对象中定义路由处理函数,如 index, list, login
  3. 注册路由:

    • 使用 app.getapp.post 方法注册路由。这些方法会自动处理路径匹配和参数解析。
  4. 启动服务器:

    • 最后,启动服务器并监听指定端口(例如 3000)。

这种方式更简洁且易于维护,Express 会自动处理路径匹配、参数解析等细节,因此无需手动编写复杂的正则表达式。

回到顶部