Я пытаюсь отправить запрос на URL-адрес с помощью xmlhttprequest и запустить файл js с помощью Node js. но ответ на него приходит как неопределенный. когда я отправляю те же данные с помощью команды CURL, я получаю правильный ответ. Почему он не работает в случае nodejs и xmlhttprequest.почему ответ на команду xmlhttprequest post в узле JS приходит как undefined
Вот код, который я написал. имя файла test.js
'use strict';
var readlineSync = require('readline-sync');
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var urlopen =require("openurl");
var clientId = "amzn1.application-oa2-client.775a44579eaf461b92db3d1a4cb23a5a";
var deviceId = "Test_device1";
var deviceSerialNumber = 123;
var redirectUri = "https://localhost:9745/authresponse";
var responseType ="code";
var clientSecret = "29a6520d97d11d640e030786e133ccec9ead67005aaa45c212e72e10b00900ff";
promptUserLogin();
sleep(10000);
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
var Urlcode = readlineSync.question('enter the code ');
var proceed = readlineSync.question('proceed with execution?');
if(proceed){
getTokenFromCode(Urlcode);
}
function promptUserLogin() {
const scope = 'alexa:all';
const scopeData = {
[scope]: {
productID: deviceId,
productInstanceAttributes: {
deviceSerialNumber: deviceSerialNumber
}
}
};
const authUrl = 'https://www.amazon.com/ap/oa?client_id=' + clientId + '&scope=' + encodeURIComponent(scope) + '&scope_data=' + encodeURIComponent(JSON.stringify(scopeData)) + '&response_type=' + responseType + '&redirect_uri=' + encodeURI(redirectUri);
console.log("abhi avs.js promptUserLogin newWindow");
urlopen.open(authUrl);
}
function getTokenFromCode(CODE) {
return new Promise((resolve, reject) => {
if (typeof CODE !== 'string') {
const error = new TypeError('`code` must be a string.');
this._log(error);
return reject(error);
}
const grantType = 'authorization_code';
var postData = 'grant_type=' + grantType + '&code=' + CODE + '&client_id=' + clientId + '&client_secret=' + clientSecret + '&redirect_uri=' + encodeURIComponent(redirectUri);
const url = 'https://api.amazon.com/auth/o2/token';
const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
xhr.onload = (event) => {
let response = xhr.response;
response = JSON.parse(xhr.response);
const isObject = response instanceof Object;
const errorDescription = isObject && response.error_description;
if (errorDescription) {
const error = new Error(errorDescription);
console.log(error);
return reject(error);
}
const token = response.access_token;
const refreshToken = response.refresh_token;
const tokenType = response.token_type;
const expiresIn = response.expiresIn;
//this.setToken(token)
//this.setRefreshToken(refreshToken)
//this.emit(AVS.EventTypes.LOGIN)
console.log('abhi avs.js Logged in.');
resolve(response);
};
xhr.onerror = (error) => {
this._log(error);
reject(error);
};
xhr.send(postData);
});
}
Я запустил его в терминале с помощью командного узла test.js. как только мы запустим его, он откроет страницу входа в amazon, мы будем перенаправлены на URL с кодом в нем. https://localhost:9745/authresponse?code=ANcUMLaDrkMtCwUSrIqc&scope=alexa%3Aall
Здесь код ANcUMLaDrkMtCwUSrIqc. передайте эту строку как значение и введите 1 для выполнения следующих шагов. то он дал ошибку в
неопределенную ^
SyntaxError: Неожиданный маркер ˙U на Object.parse (родной) в xhr.onload (/home/saiabhi/Avs/avs_test.js:100: 25) at dispatchEvent (/home/saiabhi/Avs/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25) at setState (/home/saiabhi/Avs/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:614: 14) на IncomingMessage. (/home/saiabhi/Avs/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13) at emitNone (events.js: 72: 20) на IncomingMessage.emit (events.js: 166: 7) at endReadableNT (_stream_readable.js: 913: 12) на nextTickCallbackWith2Args (Node.js: 442: 9) на process._tickCallback (node.js: 356: 17)
ссылка ссылка: https://miguelmota.com/blog/alexa-voice-service-authentication/
, когда я побежал используя curl для одинаковых значений, он отлично работал.
curl -X POST --data "grant_type=${GRANT_TYPE}&code=${CODE}&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}&redirect_uri=${REDIRECT_URI}" https://api.amazon.com/auth/o2/token
what am i doing wrong. please let me know.
Разбейте свой код до наименьшей части, которая воспроизводит проблему. Вероятно, 99% вы сами найдете проблему самостоятельно. – Brad