Отдельная конечная точка rest-hapi не возвращает результаты обработчика
Простите, если это глупый вопрос, но последний раз, когда я кодировал javascript, было почти 20 лет назад... Я переучиваю javascript в эти недели, и я не уверен, что все понял.
Я использую хапи с rest-hapi и хочу добавить несколько автономных конечных точек, в основном переводя внутреннюю часть этой экспресс-формы учебника Autodesk.
Я использую основной скрипт rest-hapi, пример main, и попытался добавить маршрут с помощью следующего кода:
//api/forge.js
module.exports = function(server, mongoose, logger) {
const Axios = require('axios')
const querystring = require('querystring')
const Boom = require('boom')
const FORGE_CLIENT_ID = process.env.FORGE_CLIENT_ID
const FORGE_CLIENT_SECRET = process.env.FORGE_CLIENT_SECRET
const AUTH_URL = 'https://developer.api.autodesk.com/authentication/v1/authenticate'
const oauthPublicHandler = async(request, h) => {
const Log = logger.bind('User Token')
try {
const response = await Axios({
method: 'POST',
url: AUTH_URL,
headers: {
'content-type': 'application/x-www-form-urlencoded',
},
data: querystring.stringify({
client_id: FORGE_CLIENT_ID,
client_secret: FORGE_CLIENT_SECRET,
grant_type: 'client_credentials',
scope: 'viewables:read'
})
})
Log.note('Forge access token retrieved: ' + response.data.access_token)
return h.response(response.data).code(200)
} catch(err) {
if (!err.isBoom){
Log.error(err)
throw Boom.badImplementation(err)
} else {
throw err
}
}
}
server.route({
method: 'GET',
path: '/api/forge/oauth/public',
options: {
handler: oauthPublicHandler,
tags: [ 'api' ],
plugins: {
'hapi-swagger': {}
}
}
})
}
Код работает, и я могу отобразить access_token в консоли nodejs, но swagger не получает ответ:
Сначала я подумал, что асинхронную функцию нельзя использовать в качестве обработчика, но моя версия хапи - 17.4.0, и она поддерживает асинхронные обработчики.
Что я делаю неправильно?
1 ответ
Оказывается, это было легко исправить: мне просто нужно было указать имя хоста сервера Hapi в моем основном скрипте!
Проблема была с CORS, так как Хапи использовал имя моего компьютера вместо localhost. С помощью
let server = Hapi.Server({
port: 8080,
host: 'localhost'
})
решил мою проблему.