module.exports = {
getWeather: function (url) {
return fetch(url)
.then((resp) => {
return resp.json();
})
}
};
.get((req, res) => {
weather.getWeather( "https://api.openweathermap.org/data/2.5/weather?q=London&appid={тут ключ}" )
.then(data=>res.send(data));
})
возник ещё вопрос. Всё работает с БД на 3 пользователя. А когда пустил скрипт по "боевой" базе на 1800 пользователей - просто ничего не происходит xD жду по 5 минут, 0 вывода в консоль. :(
// расшифровывает поля из списка fields если они присутствуют в объекте data
// data - либо объект с полями, либо массив таких объектов
// fields - список полей (ключей) содержимое которых надо декодировать
function fbDecode(data, fields){
if (Array.isArray(data)) {
// если массив, то декодируем его элементы
return data.map(d=>fbDecode(d, fields);
}else if ( typeof data)) {
// если объект, то делаем его копию и в ней декодируем те его свойства, которые есть в fields
return Object.keys(data).reduce((a,k)=>{
if (fields.includes(k)) {
a[k] = iconv.decode(data[k]);
}else{
a[k] = data[k];
}
return a;
},{});
} else {
// во всех остальных случаях просто возвращаем то что в data
return data;
}
}
Firebird.attach(options, function(err, db) {
if (err)
throw err;
// далее ЛЮБОЙ ВАШ ЗАПРОС В БД, РЕЗУЛЬТАТОМ КОТОРОГО БУДЕТ ОБЪЕКТ С ДАННЫМИ ТРЕБУЮЩИМИ ДЕКОДИРОВАНИЯ ИЛИ МАССИВ ТАКИХ ОБЪЕКТОВ
// например для запроса SELECT USERNAME FROM USERS в result будет массив с объектами вида
// [
// {USERNAME: <буфер с данными>},
// {USERNAME: <буфер с данными>},
// и т.д.
// ]
// и декодировать нужно как-то так var res = fbDecode(results, ['USERNAME'] ) в результате чего в res получим что то типа
// [
// {USERNAME: 'testuser1'},
// {USERNAME: 'пользователь'},
// и т.д.
// ]
//
// а для запроса SELECT ID, USERNAME, INFO FROM USERS в result будет массив с объектами вида (это для примера, в вашей таблице USERS может и не быть полей ID и INFO)
// [
// {ID: 12345, USERNAME: <буфер с данными>, INFO: <буфер с данными>},
// {ID: 67890, USERNAME: <буфер с данными>, INFO: <буфер с данными>},
// и т.д.
// ]
// и декодировать нужно как-то так var res = fbDecode(results, ['USERNAME', 'INFO'] ) в результате чего в res получим что то типа
// [
// {USERNAME: 'testuser1', INFO: 'bla-bla-bla'},
// {USERNAME: 'пользователь', INFO: 'это Вася, он баран)))'},
// и т.д.
// ]
// соответсвенно, к декодированным данным можно будет обращаться так:
// res[0].USERNAME // testuser1
// res[1].INFO // это Вася, он баран)))
// ну или как у вас через цикл
// for (let user of res) {
// console.log(user.ID, user.USERNAME, user.INFO);
// }
db.query('SELECT USERNAME FROM USERS', function(err, results) {
const res = fbDecode(results, ['USERNAME'] )
for (let user of res) {
console.log(user.USERNAME);
}
db.detach();
});
});
Firebird.attach(options, function(err, db) {
if (err)
throw err;
db.query('SELECT USERNAME FROM USERS', function(err, result) {
const res = result.map(buf=>{
return {
buf: buf.USERNAME,
text: iconv.decode(buf.USERNAME, "win1251")
};
});
console.log(res);
db.detach();
});
});
Firebird.attach(options, function(err, db) {
if (err)
throw err;
db.query('SELECT USERNAME FROM USERS', function(err, result) {
const res = result.map(buf=>{
return {
buf: buf.USERNAME
text: iconv.decode(buf.USERNAME, "win1251");
};
});
console.log(res);
db.detach();
});
});
iconv = require('iconv-lite');
const temp = [
{codemap: "win1251", data: [0xcf, 0xee, 0xeb, 0xfc, 0xe7, 0xee, 0xe2, 0xe0, 0xf2, 0xe5, 0xeb, 0xfc] },
{codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74] },
{codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74, 0x33] }
];
function test(a){
let buf = Buffer.from(a.data);
if(a.codemap != "utf8"){
console.log(iconv.decode(buf, a.codemap) );
}else{
console.log(buf.toString());
}
}
temp.forEach(a=>{
test(a);
});
// на выходе:
// Пользователь
// test
// test3
const temp = [
{codemap: "ascii", data: [0xcf, 0xee, 0xeb, 0xfc, 0xe7, 0xee, 0xe2, 0xe0, 0xf2, 0xe5, 0xeb, 0xfc] },
{codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74] },
{codemap: "utf8", data: [0x74, 0x65, 0x73, 0x74, 0x33] }
];
function test(a){
const buf = Buffer.from(a.data);
console.log(buf.toString(a.codemap));
}
temp.forEach(a=>{
test(a);
});
// выведет:
// Onk|gnb`rek|
// test
// test3
{ USERNAME: <Buffer cf ee eb fc e7 ee e2 e0 f2 e5 eb fc> }
похоже имеет кодировку ascii (и точно не utf8){ USERNAME: <Buffer 74 65 73 74> }
и { USERNAME: <Buffer 74 65 73 74 33> }
имеют кодировку utf8.