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