我正在做代码重构。
在试图通过分离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
,否则这将无法正常工作。