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
我在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.js
或server.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' });
});
但是通常情况下,我们会在应用级别设置一个基本路径,以保持代码的整洁和逻辑清晰。