2017-10-06 101 views
-1

我正在使用node.js中的express來處理APi。如何從同一個控制器的另一個動作中調用一個動作,快速?

的Controler:

/** 
* @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); 

一切工作正常,我可以調用這些,終點從瀏覽器和P ostman。但是,我怎樣才能打電話,transcribe行動從videoUploaded行動,同時發送req params。

+0

在** **控制器如果您有initiallized功能一個名稱然後可以在'videoUploaded'函數中調用它,然後執行'module.exports = {videoUploaded:「videoUploaded_function」,transcribe:「transcribe_function」}' – ArchNoob

+0

@ArchNoob,實際上在控件中還有很多其他動作也是。 – mega6382

+1

我仍然認爲你可以從一個命名的函數調用它並進行單獨的導出。 哦,已經有一個答案支持我的觀點! – ArchNoob

回答

-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可以調用轉錄)。然後我們導出指向文件中函數的指針,所以你可以從外部調用它們。


更好soluce是使用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); 
+0

Umm ..'videoUploaded();'應該是'videoUploaded(req,res);'他需要他們的params。 – ArchNoob

+0

是的,它只是在這裏顯示它的一般架構 –

+0

@ mega6382我已經執行編輯:)如果你需要更多的解釋,請告訴我 –

相關問題