如何从同一控制器的另一个动作调用一个动作,在快递?

时间:2017-10-06 11:32:07

标签: node.js express

我正在使用node.js中的express进行APi。

的Controler:

$wpf.startButton.Add_Click({
    write-output "This message is not shown"
})

路线:

/**
 * @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); 参数时,如何从transcribe动作内部调用videoUploaded动作。

1 个答案:

答案 0 :(得分:-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可以调用转录)。然后我们将指针导出到文件中的函数,这样你就可以从外面调用它们了。

更好的解决方案是使用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);