Nodejs express 路由配置的问题

Nodejs express 路由配置的问题

刚接触node的菜鸟 express最新的版本是把路由配置都转移到routers目录下的index.js中配置了吗? 我在express自动生成的index.js中加入 router.get(’/about’,function(req,res){ res.end(‘haha’); }); app.js中没有修改 运行能访问127.0.0.1/about这个路径

但是我还看到要在app.js中添加路由的方案 ,就是这个样子的 app.get(’/’, routes.index); app.get(’/about’, function(req, res){ res.send(‘Hello from the about route!’); }); 但是我发现我自动生成的app.js中没有第一条app.get(’/’, routes.index); 当我添加第二条的时候也运行不了

我的理解是express重新将路由条目的配置移到了index.js中配置了 求大神们给讲一讲 多谢了


8 回复

当然可以!以下是对“Nodejs express 路由配置的问题”的详细解答:

Nodejs Express 路由配置的问题

问题描述

你提到在使用Express时遇到路由配置的问题。你发现Express最新版本似乎将路由配置从app.js转移到了routes/index.js文件中,但你不确定如何正确地配置这些路由。

解释

在较新的Express版本中,确实推荐将路由逻辑分离到单独的文件中,这样可以使应用结构更加清晰和易于维护。通常情况下,路由文件会被放置在routes目录下,并且每个路由文件都会导出路由处理函数。

示例代码

假设你的项目结构如下:

myapp/
├── app.js
└── routes/
    └── index.js

1. app.js 文件

在这个文件中,你需要导入路由模块并将其挂载到应用实例上。

const express = require('express');
const path = require('path');
const routes = require('./routes/index');

const app = express();

// 设置模板引擎(如果需要)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// 使用静态文件(如果需要)
app.use(express.static(path.join(__dirname, 'public')));

// 挂载路由
app.use('/', routes);

// 其他中间件或路由配置

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

2. routes/index.js 文件

在这个文件中,你可以定义路由处理函数。

const express = require('express');
const router = express.Router();

// 定义GET路由
router.get('/about', (req, res) => {
    res.send('Hello from the about route!');
});

// 导出路由
module.exports = router;

总结

  • app.js中,你需要导入路由模块并将其挂载到应用实例上。
  • routes/index.js中,你可以定义具体的路由处理函数。
  • 这样做的好处是使代码更加模块化和易于管理。

希望这能帮助你解决路由配置的问题!如果你还有其他疑问,请随时提问。


app.js: var data = require(’./routes/data’); app.get(’/data’, data.data); 要有两句这个才行。我也初学。往高手指点。

如果是用express-generator产生的项目,app.js里会有 app.use(’/’, routes);这个,表示路由会定义在routes这个对象里,而这个在前面会require,你看看呢

express-generator是比express多一个命令行工具吗? 我创建项目是 express example 这样创建的 app.js上面有这句话 var routes = require(’./routes/index’); 可以理解成路由的routes的index.js中吗

app.use 申明注入而已。router.get=app.get router能生效是因为APP.js中有一句 app.use(routes) [route = require(’./routes’)] node的的寻找方式 1.routes/index 2.routes/index.js 3.routes/index/index.js

app.use(’/’, routes); app.use(’/users’, users); 是这句话吧? 它只是一个申明 node会自动在查找下面的路由

多谢 我明白什么意思了

在较新的 Express 版本中,确实推荐将路由逻辑分离到独立的文件中进行管理。这有助于保持项目的结构清晰,便于维护。

示例项目结构

my-express-app/
├── app.js
├── package.json
├── routes/
│   └── index.js
└── views/
    └── index.ejs

app.js 示例代码

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

const app = express();

// 设置模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// 静态文件中间件
app.use(express.static(path.join(__dirname, 'public')));

// 使用路由中间件
app.use('/', require('./routes/index'));

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on http://localhost:${PORT}`);
});

routes/index.js 示例代码

const express = require('express');
const router = express.Router();

// 定义关于页面路由
router.get('/about', (req, res) => {
    res.send('Hello from the about route!');
});

// 主页路由
router.get('/', (req, res) => {
    res.render('index'); // 渲染位于 views 目录下的 index.ejs 文件
});

module.exports = router;

关于问题中的描述

  1. 使用独立的 index.js 来配置路由:在 Express 中,将路由配置放在单独的文件中是常见的做法,这有助于模块化和组织代码。

  2. 无需手动添加 app.get('/', routes.index);:如果你在 index.js 中定义了一个默认路由(如上面的 router.get('/', ...)),Express 会自动处理 / 路径。因此,无需在 app.js 中手动添加 app.get('/', routes.index);

  3. 确保路由顺序:路由配置的顺序很重要,因为 Express 会按顺序匹配请求。确保更具体的路由写在更通用的路由之前。

希望这些示例代码和解释能够帮助你更好地理解和解决路由配置的问题。

回到顶部