我正在尝试从公共 Tesla API ( https://www.teslaapi.io/vehicles/state-and-settings ) 中检索我的车辆数据。我正在使用 NodeJS,通过 Request 和 Express 包,我能够检索初始 accessToken 以及车辆 ID 号。但是,当我尝试使用这两个值实际对数据发出 GET 请求时,我不断收到 404 错误。我已经调试了几个小时,老实说不知道为什么。我在邮递员中到达了相同的端点并得到了正确的响应,任何帮助将不胜感激!另外,我怎样才能避免在前一个回调中发出后续请求,异步是要走的路吗?谢谢!
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}!') } )