Nodejs中用户路由users.js配置问题

Nodejs中用户路由users.js配置问题

我在users.js 配置了这样一条路由 router.get(’/’, function(req, res) { res.render(‘users/index’,{title:‘Users’}); });

在请求的时候 http://localhost:8080/users 就能显示出内容 是因为users.js路由配置的时候自动将users加入到url中了吗?

比如配置这样的一个路由条目 router.get(’/users’, function(req, res) { res.render(‘users/index’,{title:‘Users’}); }); 发送请求的时候 url :http://localhost:8080/users/users


6 回复

我在users.js 配置了这样一条路由 router.get(’/’, function(req, res) { res.render(‘users/index’,{title:‘Users’}); });

在请求的时候 http://localhost:8080/users 就能显示出内容 是因为users.js路由配置的时候自动将users加入到url中了吗?

比如配置这样的一个路由条目 router.get(’/users’, function(req, res) { res.render(‘users/index’,{title:‘Users’}); }); 发送请求的时候 url :http://localhost:8080/users/users


没看出道理…围观

当然可以。根据你的描述,你希望了解Node.js中的路由配置,并且想确认为什么在配置router.get('/', ...)时,访问http://localhost:8080/users就能正确显示内容。

路由配置的默认行为

首先,你需要理解的是,在Express应用中,路由前缀通常是通过创建路由器实例并将其挂载到应用上来实现的。例如:

// app.js 或 server.js
const express = require('express');
const usersRouter = require('./routes/users');

const app = express();

app.use('/users', usersRouter); // 这里将所有以 /users 开头的请求都交给 usersRouter 处理

然后在users.js文件中,你可以这样配置路由:

// routes/users.js
const express = require('express');
const router = express.Router();

router.get('/', function(req, res) {
    res.render('users/index', { title: 'Users' });
});

module.exports = router;

为什么访问 http://localhost:8080/users 可以正常工作?

当你在app.jsserver.js中使用app.use('/users', usersRouter);时,Express会自动将/users作为前缀添加到usersRouter处理的所有路径上。因此,当你配置router.get('/', ...)时,实际上是在处理/users这个路径。

如果你想让路由直接访问 /users 而不是 /users/users

如果你希望直接访问http://localhost:8080/users而不是http://localhost:8080/users/users,你应该确保路由配置正确地映射到根路径/。这已经在上面的例子中实现了。

示例代码总结

app.js 或 server.js

const express = require('express');
const usersRouter = require('./routes/users');

const app = express();

app.use('/users', usersRouter);

app.listen(8080, () => {
    console.log('Server is running on port 8080');
});

routes/users.js

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

router.get('/', function(req, res) {
    res.render('users/index', { title: 'Users' });
});

module.exports = router;

通过这种方式,你可以确保当用户访问http://localhost:8080/users时,会触发users.js中的路由配置,并正确渲染页面。

[@DevinXian](/user/DevinXian) 我找到原因了 在app.js中 有这样一句话 var routes = require(’./routes/index’); var users = require(’./routes/users’);

app.use(’/’, routes); app.use(’/users’, users); 我是用express自动生成的项目 这个意思就是会去相应的目录查找路由的意思 app.use(’/users’, users); 我试着把这句写成这样 app.use(’/’, users); 这样的话 配置就对了 比如我配置 http://localhost:8080/users router.get(’/users’, function(req, res) { res.render('users/index’,{title:’Users’}); });

这样的话 我试着在users.js中加一个路由 router.get(’/new’,function(req,res){ res.render(‘users/new’,{title:‘New User’}); }); 只能通过http://localhost:8080/new 访问 不能像之前的http://localhost:8080/users/new

[@icantunderstand](/user/icantunderstand) 我说怎么多了一层路由…这个相当于内部路由分发了…

根据你的描述,users.js 文件中的路由配置会自动将 users 添加到 URL 中。其实并不是自动添加,而是你在应用中已经配置了一个中间件或基础路径来处理 /users 这个前缀。

示例代码

假设你有一个基本的应用结构如下:

app.js
routes/
  users.js
views/
  users/
    index.pug

app.js 中,你可能已经配置了一个基本路径来处理 /users 前缀:

const express = require('express');
const app = express();
const usersRouter = require('./routes/users');

// 设置基本路径为 /users
app.use('/users', usersRouter);

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

然后在 routes/users.js 中,你可以这样配置路由:

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

router.get('/', (req, res) => {
  res.render('users/index', { title: 'Users' });
});

module.exports = router;

解释

  • app.js 中,使用 app.use('/users', usersRouter); 将所有 /users 路径下的请求都传递给 usersRouter
  • users.js 中,定义了一个简单的 GET 路由,当访问 /users 时,会渲染 users/index 模板,并传递 { title: 'Users' } 作为变量。

因此,当你访问 http://localhost:8080/users 时,实际请求的是 http://localhost:8080/users/,这正是我们在 users.js 中定义的路由。

如果你希望路由为 http://localhost:8080/users/users,那么你需要调整 app.js 的配置,去掉 /users 前缀,并在 users.js 中修改路由路径:

app.use('/', usersRouter);
router.get('/users', (req, res) => {
  res.render('users/index', { title: 'Users' });
});

但是通常情况下,我们会在应用级别设置一个基本路径,以保持代码的整洁和逻辑清晰。

回到顶部