REST APIを使いやすくするための最初のnode.jsパッケージを作成しています。パッケージを使用している人が以下を実行できるようにパッケージをフォーマットする際に問題があります。それらのアプリケーション。私の現在の設定でNPMパッケージのセットアップを書く方法
var Water= require("water-reservation");
var water = Water({username: myusername, password: mypassword});
// Problem here because Water({}) needs to do a REST call to get a bearer
// token to use the API I am trying to simplify. Thus, it tries to
// get_water(callabck) before the bearer_token var is set in my package.
water.get_water(function(err, result){
if(err){
console.log(err);
console.log("----------------------------------------------");
}
else{
console.log(result);
console.log("----------------------------------------------");
}
});
は、私は私のRESTは、パッケージを要求全てに使用ベアラートークンを取得するには、ユーザーのユーザー名とパスワードを取得し、RESTエンドポイントに渡します。私のパッケージでbearer_token変数を設定する前に、非同期の性質がユーザーファイルのget_waterを呼び出します。私は上記のように、ユーザーがパッケージを使用できるようにセットアップを作るための方法を見つけようとしています
var request = require('request');
var bearer_token = "";
var api_url = "";
var Water = function(credentials){
api_url = credentials.api_url;
var username = credentials.username;
var password = credentials.password;
get_bearer_token(username, password, function(err, access_token){
bearer_token = access_token;
});
};
function get_bearer_token(username, password, callback){
var request_options = {
url: api_url + "/auth",
method: "GET",
'auth': {
'user': username,
'pass': password
}
};
request(request_options, function(err, res, body){
if(err) {
return callback("Water Initialization Error: " + err, null);
}
else {
return callback(null, body);
}
});
}
// Get water
Water.prototype.get_water = function(callback) {
var request_options = {
url: api_url + "/water",
method: "GET",
'auth': {
'bearer': bearer_token
}
};
request(request_options, function(err, res, body){
if(err) {
return callback(err, null);
}
else{
return callback(null, body);
}
});
};
// more package functions...
module.exports = Water;
:ここ
は私のパッケージには、次のようになります。私はそのスタイルに設定されていませんが、ユーザーが理解して使用するのが最も簡単なようです。
これを修正する唯一の方法は、ウォーター({})にコールバックを追加することですが、コールバックにすべての水関連コードをラップさせるという混乱を招くことになります。例えば、Twitterパッケージを見ることでそれができるのは分かっていますが、私はまだ彼らのやり方について心を抱くことができます。どんな助けでも感謝します、ありがとう。
'ノードtwitter'パッケージは、いずれかを作るようには見えません。これを使用するには
をプロトタイプ関数内の非同期リクエスト – gnerkus
多分、私は自分のベアラトークンを提供し、セットアップで休憩要求をしないようにしなければなりません。しかし、私は、彼らがパッケージを使いやすくするためのトークンを手に入れておくことで助けになることを望んでいます。 –