Как мне вернуть ajax-ответ от unirest в nodejs?

#ajax #node.js #mongodb #post #unirest

#ajax #node.js #mongodb #Публикация #unirest

Вопрос:

Я использую unirest из unirest.io для выполнения ajax-вызовов в node. Я хочу вернуть посещаемость, чтобы я мог использовать ее в другом месте.

 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("ntt Found ID in Databasen"   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 в базе данных.

Я могу открывать и сохранять данные внутри конечного метода unirest, но эта функция или маршрут являются общедоступными, и любой может получить к ним доступ, не предоставляя секретный ключ в заголовке. Я пытаюсь избежать этого, потому что, я думаю, это рискованно?

Всего один мотив — извлечь данные, передать их тому, кто их запросил, и сохранить копию в базе данных.

Никакого монго внутри unirest, потому что это может быть (?) опасно.

Последний оставшийся вариант (по крайней мере, тот, который я могу придумать) — вернуть ответ и использовать его где-нибудь еще.

Ответ №1:

Unirest использует много вещей, о которых я не знаю, и я думаю, что я не могу вернуть ответ, как вы можете сделать в других функциях.

Эта проблема была решена путем помещения функции в объект, а затем создания другого объекта data , в котором будут храниться данные.

Теперь, когда вы получите ответ, обновите data объект, а затем передадите обратный вызов в unirest, который вернет data объект.

У меня это сработало.

Весь код:

 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("ntt Found ID in Databasen"   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;
}