Я пытаюсь получить данные моего автомобиля из API * Tesla publi c (https://www.teslaapi.io/vehicles/state-and-settings). Я использую NodeJS, с пакетами Request и Express, я могу получить начальный accessToken, а также идентификационный номер транспортного средства. Однако, когда я пытаюсь использовать эти два значения для фактического выполнения запроса GET для данных, я получаю ошибку 404. Я часами отлаживал и честно не знаю почему. Я попал в ту же конечную точку в почтальоне и получил правильный ответ, любая помощь будет принята с благодарностью! Кроме того, как я могу избежать необходимости делать последующие запросы внутри предыдущего обратного вызова, будет ли Asyn c путь к go? Спасибо!
const express = require("express");
const app = express();
const port = 3000
var path = require("path");
var bodyParser = require("body-parser");
app.use(express.static(path.join(__dirname, '/public')));
app.set("view engine", "ejs");
var accessToken;
var request = require('request').defaults({
headers: {
"x-tesla-user-agent": "TeslaApp/3.4.4-350/fad4a582e/android/8.1.0",
"user-agent": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel XL Build/OPM4.171019.021.D1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.91 Mobile Safari/537.36"}
});
app.get("/", function(req, resp){
/* GET ACCESS TOKEN */
request({
url: 'https://owner-api.teslamotors.com/oauth/token',
method: 'POST',
json: true,
gzip: true,
body: {
"grant_type": 'password',
"client_id": '81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384',
"client_secret":'c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3',
"email": 'MYUSERNAME',
"password": 'MYPASSWORD'
},
}, function(err, res, body) {
accessToken = body.access_token;
/* GET THE VEHICLE ID NUMBER */
request({
url: 'https://owner-api.teslamotors.com/api/1/vehicles',
method: 'GET',
headers: { "Authorization": "Bearer " + accessToken, "Content-Type": "application/json; charset=utf-8" }
}, function(err, res, body) {
parsedBody = JSON.parse(body);
var vehicleID = parsedBody.response[0].id;
resp.render('index', {hi: accessToken} );
var vehicleIDString = vehicleID.toString();
var finalURL = 'https://owner-api.teslamotors.com/api/1/vehicles/' + vehicleIDString + '/vehicle_data';
/* Get Vehicle Data (THIS IS GIVING 404) */
request({
method: 'GET',
url: 'https://owner-api.teslamotors.com/api/1/vehicles/' + vehicleIDString + '/vehicle_data',
headers: { "Authorization": "Bearer " + accessToken, "Content-Type": "application/json; charset=utf-8" }
},
function(err, res, body){
console.trace();
});//END GET VEHICLE DATA
});//END VEHICLE ID NUMBER REQUEST
});//END ACCESS TOKEN REQUEST
});
/* HIT ANY ENDPOINT WE WANT */
app.listen(port, () => {console.log('Example app listening on port ${port}!') } )