2016-10-20 4 views
0

私はunirest.ioからunirestを使ってノードでajax呼び出しを行っています。 私は出席を戻したいので、別の場所で使うことができます。nodejsのunirestからajaxレスポンスを返すにはどうすればよいですか?

function studentAttendance(req, res) { 
    unirest 
    .post('http://coer.ac.in/atten.php') 
    .field('coerid', req.params['id']) 
    .end(function (response) { 
     if (response.error) { 
      return response.error; 
     } else { 
      var attendance = { 
       "name": null, 
       "attendance": null, 
       "attenLastUpdated": null 
      } 
      if (response.raw_body.indexOf('Invalid COER ID') === -1) { 
       attendance = { 
        "name": response.raw_body.split("<h3>")[1].split("</h3>")[0].split("Mr/Ms ")[1].split(" have")[0], 
        "attendance": response.raw_body.split("<h3>")[1].split("</h3>")[0].split("%")[0].substr(String.length - 6), 
        "attenLastUpdated": response.raw_body.split("<p>")[1].split("</p>")[0].split(" Update ")[1] 
       } 
       console.log("\n\t\t Found ID in Database\n" + JSON.stringify(attendance)); 
       res.send(attendance); 
      } else { 
       attendance = { 
        "name": null, 
        "attendance": "Invalid ID", 
        "attenLastUpdated": "Invalid ID" 
       } 
       console.error("\nError: Invalid COER ID. No match in Database."); 

       res.send(attendance); 
      } 
     } 
    }); 
} 

私はreturn audience;を試してみましたが、その後、return unirestし、それが出力の印刷が、それはAjaxの呼び出しで使用可能なオブジェクトや他の多くのデータを印刷しています。

このPOSTコールの結果を出席サーバーに使用し、別の場所でこの結果を使用したいとします。これを行うには出席を返す必要がありますが、私はどのようにそれを行うか分かりません。

IDを入力するだけで、名前と出席者を取得してAPIコンシューマーへの応答として渡し、データベースに保存されている無関係な応答を保存するようにシステムを構築しようとしています。

私はunirestのendメソッドの中でデータを開いて保存することができますが、この関数やルートはpublicであり、誰でもヘッダーに秘密キーを指定せずにアクセスできます。私はそれが危険だと思うので、私はそれを避けようとしていますか?

ちょうど1つの動機、データを取得し、それを要求した人に渡し、コピーをデータベースに保存します。

mongoが一番内側にないので、(?)危険です。

残った最後のオプション(少なくとも私が考えることができるもの)は、応答を返して、それ以外のところで使用します。

答えて

0

Unirestは、私が気にしないことをたくさん使っています。私はあなたが他の機能でできるように、私は返信を返すことができないと思います。

この問題は、オブジェクトに関数を置き、データを保持する別のオブジェクトdataを作成することによって解決されました。

dataオブジェクトを返信した後、dataオブジェクトを返すように、コールバックをunirestに渡します。

これは私のために働いた。

コード全体:

var studentAttendance = { 
"studentAttendance": function (req, res) { 
    var _id = req.params['id']; 
    unirest 
     .post('http://coer.ac.in/atten.php') 
     .field('coerid', _id) 
     .end(function getData(response) { 
      if (response.error) { 
       throw response.error; 
      } else { 
       if (response.raw_body.indexOf('Invalid COER ID') === -1) { 

        studentAttendance.data._id = _id; 
        studentAttendance.data.name = response.raw_body.split("<h3>")[1].split("</h3>")[0].split("Mr/Ms ")[1].split(" have")[0]; 
        studentAttendance.data.attendance = parseFloat(response.raw_body.split("have ")[1].split("%")[0]); 
        studentAttendance.data.attenLastUpdated = response.raw_body.split("<p>")[1].split("</p>")[0].split(" Update ")[1] 

        console.log("\n\t\t Found ID in Database\n" + JSON.stringify(studentAttendance.data) + "\n Updating Record in Database"); 
        res.send(studentAttendance.data); 
       } else { 
        studentAttendance.data._id = _id; 
        studentAttendance.data.name = null; 
        studentAttendance.data.attendance = "Invalid ID", 
         studentAttendance.data.attenLastUpdated = "Invalid ID" 
        console.error("\nError: Invalid COER ID. No match in Database."); 

        res.send(studentAttendance.data); 
       } 
      } 
     } 
     , attendanceCallback) 
}, 
"data": { 
    "_id": null, 
    "name": null, 
    "attendance": null, 
    "attenLastUpdated": null 
    } 
} 

function attendanceCallback() { 
return studentAttendance.data; 
} 
関連する問題