2017-09-27 16 views
1

javascript関数のヘルプで行うことができます。javascript関数に渡されるパラメータの数は、関数内で定義された数と同じにする必要がありますか?

以下のコードは、node.jsを使用したスト​​ライプの例です。基本的にコードをストライプに戻してユーザーの詳細を取得しています。

app.get('/oauth/callback', function(req, res) { 

    var code = req.query.code; 

    // Make /oauth/token endpoint POST request 
    request.post({ 
    url: TOKEN_URI, 
    form: { 
     grant_type: 'authorization_code', 
     client_id: CLIENT_ID, 
     code: code, 
     client_secret: API_KEY 
    } 
    } 
}); 

私は、同様の機能を設定する必要がありますが、主な違いは、私はすでにそのコードを持っており、機能にコードを渡したいということです。

現時点では私の関数は次のようになります。私は別の関数内からgetAccountDetails()を呼び出すが、getAccountDetails(コード)に渡したいが、私はまだJavaScriptの機能で少し苦労しています

var getAccountDetails = function(req, res) { 

    // Make /oauth/token endpoint POST request 
    request.post({ 
    url: 'https://connect.stripe.com/oauth/token';, 
    form: { 
     grant_type: 'authorization_code', 
     client_id: 'ca_XXXXXXXXXXXXXXXXXXXXXXXXX', 
     code: code, 
     client_secret: API_KEY 
    } 
    }, function(err, r, body) { 


    }); 
}; 

。 Googleクラウド機能コンソールで

***************更新**************

私は、タイムアウトメッセージが出続けます。誰かが明らかに何かを見てコードに間違っている私に知らせてください。

function getAccountDetails(code) 
{ 
    console.log(code) 
return function(req, res) { 

    // Make /oauth/token endpoint POST request 
    request.post({ 
    url: 'https://connect.stripe.com/oauth/token', 
    form: { 
     grant_type: 'authorization_code', 
     client_id: 'xxxxxxxxx', 
     code: code, 
     client_secret: 'xxxxxxxxxxxx' 
    } 
    }, function(err, r, body) { 

    // var accessToken = JSON.parse(body).access_token; 

    console.log(body); 
    }); 
} 
} 

exports.authCode = functions.https.onRequest((req, res) => { 
    console.log(req) 

    var code = req.query.code; 

    console.log(code); 

    getAccountDetails(code) 

}); 

ありがとうございました。

+0

閉鎖を見てください – sidgate

+0

更新後、あなたの問題を解決する可能性があるように、下記の@FloatingLomasの回答が表示されます。 – arbuthnott

答えて

2

あなたのタイトルへの短い質問はありません。 Javascriptは、関数定義の引数の数が、関数を呼び出すときに渡された引数の数と一致するかどうかに関して非常に柔軟です。関数が定義よりも少ない引数で呼び出された場合、含まれていない引数は、関数の実行中にundefinedなります

  • :引数の数が異なる

    取扱いは、次のように処理されます。

  • 関数が定義の中でより多くの引数で呼び出された場合は、余分な引数は実際には何の問題も

が発生することはありませんが、後者の場合には、あなたはまだ使用して渡される追加の引数にアクセスすることができますargumentsキーワード:

function example(p1, p2) { 
    console.log(arguments[2]); 
} 

example('one', 'two', 'three'); // logs: 'three' 

しかし、あなたはそれのようなルックスを使用している機能は、フレームワークの一部であってもよいです。それをどのように使うことができるかは、どのフレームワーク、そのフレームワークのどこにあるかによって異なります。

あなたは関数の定義を変更することができます。

var getAccountDetails = function(req, res, code) { 
    // ... 

、これがある限り、フレームワークの他の部分は元のために(おそらくその第三引数にそこに何かを期待して、その関数を呼び出していないようで結構です速達ベースのアプリケーションの多くは、第3引数がコールバック関数(多くの場合、nextなどと表示される)を期待している可能性があります。

この機能をヘルパーまたはサービスとして自分で作成した場合は、必要に応じて変更して試してみてください。しかし、それがフレームワークの高度に構造化された部分にある場合、それを変更すると何かが壊れる可能性があります。

1

javascriptでは、関数(A)は別の関数(B)を返すことができます。返される関数Bは、関数Aが呼び出されたものを思い出すことができます。これはクロージャと呼ばれます。だから、

function getAccoudnDetailsWith(code) { 
    return function (req, res) { //this function is stored in getAccountDetails 
    request.post({ 
     url: 'https://connect.stripe.com/oauth/token', 
     form: { 
     grant_type: 'authorization_code', 
     client_id: 'ca_XXXXXXXXXXXXXXXXXXXXXXXXX', 
     code: code,///this code is whatever you pass in 
     client_secret: API_KEY 
     } 
    }, function (err, r, body) { 


    }); 
    } 
} 

var getAccountDetails = getAccoudnDetailsWith(code); 

編集1: あなたの変更されたコードから、このためのクロージャを必要はありません。

exports.authCode = functions.https.onRequest((req, res) => { 

    var code = req.query.code; 

    // Make /oauth/token endpoint POST request 
    request.post({ 
    url: TOKEN_URI, 
    form: { 
     grant_type: 'authorization_code', 
     client_id: CLIENT_ID, 
     code: code, 
     client_secret: API_KEY 
    } 
    }, function(err, r, body) { 

     // var accessToken = JSON.parse(body).access_token; 

     console.log(body); 
     }); 
}); 
+0

ちょっと@Shyam。私は上記を試みたが、私はタイムアウトのメッセージを得続けている。オリジナルの投稿を更新しました。何か間違ったことがわかったら教えてください!どうも – Mike

2

これを試してみてください:

exports.authCode = functions.https.onRequest((req, res) => { 
    console.log(req) 

    var code = req.query.code; 

    console.log(code); 

    getAccountDetails(code)(req, res); 
}); 

getAccountDetails(code)(req, res)を期待する関数を返しているので、あなただけの提供reqresでその関数を呼び出す必要があります。あなたは実際にその関数を呼び出すわけではないので、何も起こっていません。resで何もしていないので、タイムアウトしています。

関連する問題