2017-10-06 17 views
-1

私はnode.jsのexpressを使用してAPiで作業しています。Expressで同じコントローラの別のアクションから1つのアクションを呼び出す方法は?

の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オストマン。しかし、どうすればtranscribeのアクションをvideoUploadedアクションから呼び出すことができますが、reqパラメータも送信します。あなたのケースで何が起こるそれを

import funcs from 'Questions'; 

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

を使用する方法

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

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

    videoUploaded(...); 
} 

exports default { 
    videoUploaded, 
    transcribe, 
}; 

をエクスポートする方法

+0

**コントローラーで:

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

し、それを使用する:


より良いsoluceは次のように、ES6クラスを使用することですあなたは 'videoUploaded'関数の中から呼び出すことができますし、次に' module.exports = {videoUploaded: "videoUploaded_function"、transcribe: "transcribe_function"} ' – ArchNoob

+0

@ArchNoobという名前で、あまりにも。 – mega6382

+1

私はまだ名前付き関数から呼び出すことができ、別々のエクスポートを行うことができると思います。 ああ、すでに私の要点を支持する答えがあります! – ArchNoob

答えて

-1

は、あなたが関数を作成し、module.exportsはに直接それらを格納ないということです。したがって、宣言したファイルの中には利用できません(videoUploadedは転記では利用できません)。

私はファイルに新しい関数を宣言しているので、そのスコープはファイルです(videoUploadedはtranscribeを呼び出すことができます)。そして、ファイル内の関数へのポインタをエクスポートするので、外部から呼び出すことができます。あなたが機能をinitiallized場合**

import Controller from 'Controller'; 

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

うーん.. 'videoUploaded();'は 'videoUploaded(req、res);'彼はそれらをparamsする必要があります。 – ArchNoob

+0

ええ、それはそれの一般的なアーキテクチャを示すためにちょうどここにある –

+0

@ mega6382私は編集を実行しました:)あなたはもっとexplainationが必要な場合はTelle私 –

関連する問題