Node.js 在express中,如何从同一控制器的另一个操作调用一个操作?

Node.js 在express中,如何从同一控制器的另一个操作调用一个操作?,node.js,express,Node.js,Express,我正在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(); } v

我正在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);
路线:

/**
 * @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);
一切正常,我可以从浏览器和邮递员那里调用这些端点。但是,在发送
req
参数的同时,如何从内部调用
transcribe
操作
videoUploaded
操作。

如何导出

//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中。因此,在您声明的文件中没有可用的内容(VideoUpload在转录中不可用)

我所做的是在文件中声明新函数,因此它们的作用域是文件(VideoUpload可以调用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
函数内部调用它,然后执行
module.exports={videoUploaded:“videoUploaded\u function”,transcribe:“transcribe\u function”}
@ArchNoob,实际上,控制器中还有许多其他操作。我仍然认为您可以从命名函数调用它并进行单独的导出。哦,已经有一个答案支持我的观点了!嗯<代码>视频上传()
视频上传(req,res)他需要这些参数。是的ofc这里只是为了展示it@mega6382我做了一个编辑:)如果你需要更多的解释,请告诉我