2016-10-20 3 views
0

Ich verwende Unirest von unirest.io, um Ajax Anrufe in Knoten zu machen. Ich möchte die Anwesenheit zurückgeben, damit ich sie an einem anderen Ort benutzen kann.Wie gebe ich Ajax-Antwort von unirest in Nodejs zurück?

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); 
      } 
     } 
    }); 
} 

Ich habe return audience; versucht und dann return unirest und dann drucken Sie es ausgegeben ist, aber es gibt eine Menge von Objekten und anderen Daten, die in einem Ajax-Aufruf verwendet werden können.

Ich möchte das Ergebnis dieses POST-Aufrufs zu einem Anwesenheitsserver verwenden und dieses Ergebnis an einem anderen Ort verwenden. Um dies zu tun, muss ich die Teilnahme zurückgeben, aber ich habe keine Ahnung, wie es geht.

Ich versuche, ein System zu bauen, so dass Sie nur Ihre ID eingeben müssen und es wird Ihren Namen und Ihre Anwesenheit als Antwort auf den API-Consumer erhalten und auch die in einer Datenbank gespeicherte Antwort speichern.

Ich kann Daten in Unirest's End-Methode öffnen und speichern, aber diese Funktion oder Route ist öffentlich und jeder kann darauf zugreifen, ohne einen geheimen Schlüssel im Header bereitzustellen. Ich versuche das zu vermeiden, weil ich denke, dass es riskant ist?

Nur ein Motiv, holen Sie die Daten, übergeben sie an wen auch immer sie angefordert haben und speichern Sie eine Kopie in der Datenbank.

Kein Mongo innerhalb der reinsten, weil es (?) Gefährlich sein könnte.

Endgültige Option übrig (zumindest die, die ich mir vorstellen kann) ist, die Antwort zurückgeben und sie woanders verwenden.

Antwort

0

Unirest verwendet eine Menge Dinge, über die ich nicht weiß, und ich denke, dass ich das Respone nicht zurückgeben kann, wie Sie in anderen Funktionen tun können.

Dieses Problem wurde gelöst, indem Sie die Funktion in ein Objekt einfügen und dann ein weiteres Objekt data erstellen, das die Daten enthält.

Jetzt, wenn Sie die Antwort erhalten, aktualisieren Sie das data Objekt und übergeben Sie dann einen Rückruf in Unirest, der das Objekt data zurückgibt.

Das funktionierte für mich.

Whole-Code:

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; 
} 
Verwandte Themen