node.js中的路由配置



我正在做代码重构。

在试图通过分离api函数来编写高效代码时,似乎存在一个问题。

  • 控制器/板/api.js
const add = function (req, res) { 
if(req.session.user){
res.render(__dirname + '/views/board/add.ejs');
} else {
res.redirect('/');
}
};
module.exports = {
add
};
  • 控制器/板/board.js
const express = require('express');
const app = express.Router();
const api = require('./api.js');
app.get('/add', api.add);
module.exports = app;
  • index.js
const express = require('express');
const app = express();
const board = require('./controller/board/board.js');
app.use('/board', board);

http://localhost: 3000/添加为什么不能GET/add ?

您正在将路由器连接到/board,因此从board.js激活的URL是/board/add,而不仅仅是/add

board.js内部,您创建一个路由器,添加/add路由并导出它(请称为router,而不是app,因为它是)。

然后,在index.js中,你用:

连接路由器
app.use('/board', board);

这意味着只有以/board开头的路由才会到达board路由器。因此,要访问/add路由,您需要一个/board/add的URL。

如果你想让/add处于活动状态,那么要么在顶级app对象上定义/add路由(而不是在路由器上),要么更改为:

app.use(board);

这样,单板路由器就可以接收到顶级路由。


仅供参考,看起来这也可能有问题:

res.render(__dirname + '/views/board/add.ejs');

因为这里的__dirname将是controller/board。所以,除非你的/views/board/add.js实际上是controller/board内部的controller/board/views/board/add.js,否则这将无法正常工作。

最新更新