Javascript 将逻辑与Express路由器分离并仍能访问Express功能
我已经开始用Node.js和Express编写我的第一个应用程序,但是我的路由器文件变得非常混乱。在我看来,它包含了太多的逻辑 我试图将另一个文件(Parent.controller.js)中的函数传递给路由器,而不是将我的逻辑放在匿名函数中 那么像这样,Javascript 将逻辑与Express路由器分离并仍能访问Express功能,javascript,node.js,express,model-view-controller,Javascript,Node.js,Express,Model View Controller,我已经开始用Node.js和Express编写我的第一个应用程序,但是我的路由器文件变得非常混乱。在我看来,它包含了太多的逻辑 我试图将另一个文件(Parent.controller.js)中的函数传递给路由器,而不是将我的逻辑放在匿名函数中 那么像这样, Router.post('/create child',Parent.createChild) 与此相反: Router.post('/create-child', function(req, res, next) { // do s
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
中的函数触发重定向或保存闪存数据。这是因为我不确定如何从Parent.controller.js
访问req
,res
对象。如果您有任何建议,我们将不胜感激。您到底尝试了什么?访问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)。将或类似内容发送到前端,它将捕获状态代码并触发窗口。assign()
或类似的东西。req
和res
只是作为参数传递给控制器函数的普通对象。您不需要在Parent.controller.js中有任何特殊要求。只需确保createChild
的参数是req
,res
。和next
,如果需要。像这样:
module.exports.createChild = (req, res, next) => {
res.status(200).json({ message: 'OK' });
}
当然,您必须在routes文件中要求express:
const express = require('express');
const Parent = require('Parent.controller');
const router = express.Router();
Router.post('/create-child', Parent.createChild);
您可以将所有函数包装在一个对象中,并按如下方式导出它-
const Parent = require('./Parent.controller.js');
Router.post('/create-child', Parent.createChild);
Parent.controller.js
function createChild(req, res, next) {
// do your thing here
}
// Add more functions
// Export module
module.exports = {
createChild,
... // other functions
}
class Parent {
constructor() {
// fill constructor info
}
createChild(req, res, next) {
// do your thing here
}
}
module.exports = Parent;
然后像这样将其添加到路由器中-
const Parent = require('./Parent.controller.js');
Router.post('/create-child', Parent.createChild);
或者你可以走班级路线-
Parent.controller.js
function createChild(req, res, next) {
// do your thing here
}
// Add more functions
// Export module
module.exports = {
createChild,
... // other functions
}
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);