【问题标题】:How to call one action from another action of the same controller, in express? [duplicate]如何从同一个控制器的另一个动作中快速调用一个动作? [复制]
【发布时间】:2018-03-18 04:53:26
【问题描述】:

我正在使用 node.js 中的 express 开发一个 API。

控制者:

/**
 * @module QuestionController
 */

//1st Action
exports.videoUploaded = function(req,res)
{
//  myCode();
}

//2nd Action
exports.transcribe = function(req, res)
{
var id = req.params.question_id;
//  myCode();
}

路线:

var questionController = require('./../controllers/question');
var apiRouter = express.Router();

apiRouter.route('/questions/:question_id/video_uploaded')
.post(Auth.roleAtLeastPatient,questionController.videoUploaded);

apiRouter.route('/questions/:question_id/transcribe')
.post(Auth.roleAtLeastPatient,questionController.transcribe);

我的服务器文件:

var app = require('./srv/express-app');
var webserver = http.createServer(app);

一切正常,我可以从浏览器和 Postman 调用这些端点。但是,我怎么能在 videoUploaded 内部调用 transcribe 动作,同时发送 req 参数。

【问题讨论】:

  • Controller 如果你用名字初始化了一个函数,你可以从 videoUploaded 函数内部调用它,然后执行 module.exports = {videoUploaded: "videoUploaded_function", transcribe: "transcribe_function"}
  • @ArchNoob,其实控制器里还有很多其他的动作。
  • 我仍然认为您可以从命名函数调用它并进行单独的导出。哦,已经有答案支持我的观点了!

标签: node.js express


【解决方案1】:

如何导出

//1st Action
videoUploaded(req,res){
  //  myCode();
}

//2nd Action
transcribe(req, res) {
  //  myCode();

  videoUploaded(...);
}

exports default {
  videoUploaded,
  transcribe,
};

如何使用它

   import funcs from 'Questions';

    apiRouter.route('/questions/:question_id/video_uploaded')
      .post(Auth.roleAtLeastPatient, funcs.videoUploaded);

在您的情况下,您确实创建了函数并将它们直接存储到 module.exports 中。因此,在您声明它的文件中没有可用(videoUploaded 在转录中不可用)。

我所做的是将新函数声明到文件中,因此它们的范围是文件(videoUploaded 可以调用 transcribe)。然后我们导出指向文件中函数的指针,这样你就可以从外部调用它们了。


更好的解决方案是使用 ES6 类,例如:

export default class Controller {

  static videoUploaded() {
    // I can call other methods like :
    Controller.transcribe(...);
  }

  static transcribe() {

  }
}

然后使用它:

   import Controller from 'Controller';

    apiRouter.route('/questions/:question_id/video_uploaded')
      .post(Auth.roleAtLeastPatient, Controller.videoUploaded);

【讨论】:

  • 嗯.. videoUploaded(); 应该是 videoUploaded(req, res); 他需要他们的参数。
  • 是的,它只是在这里展示它的一般架构
  • @mega6382 我已经进行了编辑 :) 如果您需要更多解释,请告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 2011-08-11
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多