Хорошо, @JanithKasun проделали большую работу, чтобы полностью ответить на ваш оригинальный вопрос.Этот ответ предназначен для того, чтобы немного расширить его, чтобы получить концептуальную проблему, которая явно не задана в вашем вопросе.
Насколько я понимаю ваш код, вы пытаетесь извлечь некоторые данные из стороннего ресурса на основе информации в запросе, поступающем в обработчик вашего приложения.В идеале вы хотите отделить свой код таким образом, чтобы сделать его более пригодным для повторного использования / сопровождения.Я отмечаю, что рассматриваемый код фактически не использует объект запроса или ответа вообще , но я собираюсь предположить, что у вас будет какой-то параметр для функции getBody, который поможет вам построить URIэто просит.Итак, для этого:
// ./lib/get-body.js
const BASE_URI = 'https://example.com/search?q='
async function getBody (query) {
let body = await makeRequest(query);
return body;
}
function makeRequest(query) {
return new Promise((resolve, reject) => {
let uri = `${BASE_URI}{query}`; // results in something like 'https://example.com/search?q=cats'
let options = {
uri: uri,
};
// Note: removed console statements here to centralize error handling
request(options, function (error, response, body) {
if (error) {
return reject(error);
} else {
let jsonObject = JSON.parse(body);
return resolve(jsonObject);
}
});
})
}
// export the top level function for reuse
module.exports = getBody;
Теперь, в вашем коде маршрутизации:
// ./index.js or wherever
const express = require('express');
const getBody = require('./lib/get-body');
//...whatever other setup...
app.get('/', async (req, res, next) => {
const query = req.query.terms; // or whatever
try {
const body = await getBody(query);
return res.send(body);
} catch (e) {
return next(e); // if you don't do this, process hangs forever on error
}
});
// handle the errors. obviously you can do something smart like
// figure out the error code and send back something other than a 500 if appropriate.
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send('I am Bender; please insert girder.');
});
Надеюсь, что поможет!