express中路由挂载的问题
发布于 7 年前 作者 bltbbb 3878 次浏览 来自 问答

在github上看了这个一起学习node.js 在3.2.1 express.Router这里发现一个问题 文中将路由分离到routes文件夹中,在index.js中使用use挂载 我的问题出现在挂载上

routes/users.js

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

router.get('/:name', function(req, res) {
 res.send('hello, ' + req.params.name);
});

module.exports = router;

index.js

var express = require('express');
var app = express();
var indexRouter = require('./routes/index');
var userRouter = require('./routes/users');

app.use('/', indexRouter);
app.use('/users', userRouter);

app.listen(3000);

这样挂载后我发现浏览器cannot get 然后我修改users.js中

router.get('/users/:name', function(req, res) {
 res.send('hello, ' + req.params.name);
});

index.js中

app.use('/', userRouter); 

这样才能得到正确的name参数 疑惑的是,如果是配置带有参数的url时 如果只能这样,那index中挂载路由看起来会很不清晰,不知道到底是哪一级路由 而文中的方式看起来清晰,却不能够使用 望大神解惑~

5 回复

express接收参数有三种方式,req.param/req.query/req.body。

@qujinxiong image.png

是params 这是官网的截图

而且我的问题不是获取不到参数 是用use挂载动态路由

app.use(’/’, indexRouter); app.use(’/users’, userRouter);

这里是不是进indexRouter然后没有next()啦

你怎么测试的,我试了下一切正常啊


//配置路由routes
app.use('/', routes);
app.use('/ceshi', ceshi);

ceshi.get('/send/:type/:x/:y/:z', function (req, res) {
  res.send({type: req.params.type, x: req.params.x, y: req.params.y, z: req.params.z})
})
ceshi.get('/:type/:x/:y/:z', function (req, res) {
  res.send({type: req.params.type, x: req.params.x, y: req.params.y, z: req.params.z})
})

http://localhost:8888/ceshi/send/x/1/''/3
//>>{"type":"x","x":"1","y":"''","z":"3"}
http://localhost:8888/ceshi/x/1/''/3
//>>{"type":"x","x":"1","y":"''","z":"3"}

用最新版的 express 试试。上面的代码没毛病。

回到顶部