我已经开始使用Node.js和Express编写我的第一个应用程序,但我的路由器文件变得非常混乱。在我看来,它包含太多的逻辑。
我正在尝试将另一个文件(Parent.controller.js)中的函数传递给路由器,而不是将我的逻辑放在匿名函数中。
所以,就像这样:
Router.post('/create-child', Parent.createChild);
而不是:
Router.post('/create-child', function(req, res, next) {
// do something
// do something else
// do even more stuff
// this is getting messy
// oh dear
});
但我不知道如何从Parent.controller.js
中的函数触发重定向或保存闪存数据。这是因为我不确定如何仍然访问req
中的res
,Parent.controller.js
个对象。我们将非常感激地收到任何建议。
答案 0 :(得分:2)
req
和res
只是作为参数传递给控制器函数的普通对象。您不必在 Parent.controller.js 中要求任何特殊内容。只需确保createChild
的参数为req
,res
。如果您需要,请next
。像这样:
module.exports.createChild = (req, res, next) => {
res.status(200).json({ message: 'OK' });
}
当然,您必须在路线文件中要求快递:
const express = require('express');
const Parent = require('Parent.controller');
const router = express.Router();
Router.post('/create-child', Parent.createChild);
答案 1 :(得分:2)
您可以将所有函数包装在对象中并像这样导出它 -
Parent.controller.js
function createChild(req, res, next) {
// do your thing here
}
// Add more functions
// Export module
module.exports = {
createChild,
... // other functions
}
然后将其添加到路由器中,如此 -
const Parent = require('./Parent.controller.js');
Router.post('/create-child', Parent.createChild);
或者你可以去上课路线 -
Parent.controller.js
class Parent {
constructor() {
// fill constructor info
}
createChild(req, res, next) {
// do your thing here
}
}
module.exports = Parent;
您的路由器 -
const Parent = require('./Parent.controller.js');
const parent = new Parent();
Router.post('/create-child', parent.createChild);
答案 2 :(得分:1)
你究竟尝试了什么?访问req,res
应该非常简单,
(module.exports.)createChild = function(req,res){
childName = req.child_name;
..........
your child genesis code
.....
res.send('Child created')
}
根据重定向,您可以使用res.redirect()
触发它们,但是,如果您想将用户重定向到另一个页面,我建议您res.status(307).send
或类似的东西给您前端将捕获状态代码并触发window.assign()
或类似的东西。