Javascript 将逻辑与Express路由器分离并仍能访问Express功能

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

我已经开始用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
中的函数触发重定向或保存闪存数据。这是因为我不确定如何从
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);