Я работаю над ботом Discord/Roblox. Я почти закончил, но столкнулся с проблемой. Я новичок в узле, поэтому, пожалуйста, не ругайтесь слишком сильно, если код плохой. Что это делает, так это то, что я нажимаю кнопку в игре roblox, она отправляет запрос POST в приложение heroku, а затем с предоставленной информацией отправляет сообщение на канал на моем сервере разногласий.
Соответствующие биты кода:
const Discord = require('discord.js');
const request = require('request');
var express = require('express');
app = express();
bodyParser = require('body-parser');
path = require('path');
var bodyParser = require('body-parser');
var PORT = process.env.PORT || 5000;
const bot = new Discord.Client();
function GetData(id){
let url = "https://economy.roblox.com/v1/assets/"+id+"/resale-data";
let url2 = "https://thumbnails.roblox.com/v1/assets?assetIds="+id+"&size=150x150&format=Png";
let url3 = "http://api.roblox.com/marketplace/productinfo?assetId="+id
let options = {json: true};
var response = {};
request(url, options, (error, res, body) => {
if (error) {
return console.log(error)
};
if (!error && res.statusCode == 200) {
response.rap = body.recentAveragePrice
console.log(response)
};
});
request(url2, options, (error, res, body) => {
if (error) {
return console.log(error)
};
if(!error && res.statusCode == 200) {
response.thumbnail = body.data[0].imageUrl
console.log(response)
}
});
request(url3, options, (error, res, body) => {
if (error) {
return console.log(error)
};
if(!error && res.statusCode == 200) {
response.name = body.Name
console.log(response)
}
});
return response
};
app.post('/exec', function(req, res) {
res.setHeader('Content-Type', 'application/json')
res.send(JSON.stringify({
success: true
}));
console.log("working");
console.log(req.body)
var data = GetData(req.body.id)
if (req.body.state === true){
var state = "New Projected"
} else {
var state = "No longer projected"
}
const msg = new Discord.RichEmbed()
.setDescription(data.name)
.setAuthor(state)
.setColor(0x1c90d9)
.addField("RAP:", data.rap)
.setImage(data.thumbnail)
bot.channels.get("655196831835226133").send(msg);
});
Однако это сообщение, которое отправляется на сервер разногласий:
все не определено и нет эскиза
Помощь приветствуется. Большое спасибо.
console.log(req.body);
? А также что получится, если вы зарегистрируете объектvar data
в консоли до созданияmsg
? - person chrisbyte   schedule 19.12.2019{ id: '6789', state: true }
, это то, что я отправил из Roblox. Это не часть моей проблемы. Кроме того, вывод журналаdata
представляет собой пустую таблицу? Хм.... - person Mist   schedule 19.12.2019request
s возвращают действительную таблицу:{name: "Figure1", thumbnail: "long link thing"}
- person Mist   schedule 19.12.2019request
внутриGetData
являются асинхронными, и данные еще не доступны к тому времени, когда вы делаетеreturn response
. Вы знакомы сPromise
или async/await в javascript? github.com/request/request#promises--asyncawait Вам нужно подождать фактические данные, которые нужно вернуть из запроса до, вы можете перейти к следующему запросу и затем, наконец, вернуться. - person chrisbyte   schedule 19.12.2019