- Telekom mobilszolgáltatások
- Megjött a jubileumi Pixel széria
- Google Pixel topik
- Apple iPhone 15 Pro Max - Attack on Titan
- Samsung Galaxy A56 - megbízható középszerűség
- Új telefont és tabletet mutatott be a Telekom
- Milyen okostelefont vegyek?
- MediaTek alapokon a Honor Magic8 Mini?
- Mobil flották
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Nefri
csendes tag
Sziasztok!
Sharepoint listához írtam egy javascriptet. Elvileg az lenne a rendeltetése, hogy ha betöltődik az oldal ellenőrzi az évszámot és ha esetleg megváltozott az utolsó betöltés óta, akkor egy másik listának 2 mezőjét módosítsa. A kód gyönyörűen fut azzal a kis problémával, hogy teljesen random, hogy a 2 mezőből éppen melyiknek a módosításához van kedve. Hol az egyiket írja csak át, hol a másikat. Sajnos nem értek javascripthez, de úgy érzem, párhuzamosan ugrik rá a két feladatra és végül csak a gyorsabb hajtódik végre. Tudtok esetleg vmi gyógyírt, hogy szép sorban menjen végig a feladatokon vagy ha más a probléma, akkor mi az? A módosítandó lista összesen 2 oszlopból áll melyekben mindössze 1-1 elem van. Íme a kód:
$(document).ready(function() {
$SP().list("TargetList", "http://.../sites/Registry/").get({
fields: "actualyear", //Listából beolvassa az ott jegyzett évszámot
}, function getData(data) {
for (var i = 0; i < data.length; i++) {
//itt hasonlítja össze, hogy változott-e az évszám
if ((Number(data[i].getAttribute("actualyear")) < (Number(new Date().getFullYear())))) {
$SP().list("TargetList", "http://.../sites/Registry/").update({
actualyear: Number((new Date()).getFullYear()) //frissül az évszám (vagy ez hajtódik végre)
}, {
where: "actualyear < " + Number((new Date()).getFullYear()),
});
$SP().list("AdriaPostaSzamLista", "http://.../sites/Registry/").update({
lastnumber: Number("1") //újévkor 1-re változik a sorszám mező (vagy ez)
}, {
where: "lastnumber > " + Number("1")
});
}
}
});
});A megvalósításhoz Jquery és Sharepointplus-t használok.
Hálásan köszönök minden ötletet a javításra!
-
Zedz
addikt
válasz
fordfairlane #6695 üzenetére
Ezzel teljesen egyetértek. Valahol nagyon hasznos az OO, de túl van használva.
-
PumpkinSeed
addikt
válasz
martonx #6694 üzenetére
Nem programoztam OO szemleletben mar eleg regota, de ha esetleg JS-t kell heggeszteni inkabb teszem ES6-ban, mint ES5-ben. A jelenkori technologia meg tart mar ott, hogy vagy nem kell JS, vagy kell, de akkor sok. Ezalatt azt ertem, hogy pl. kisebb honlap eseten AMP, ami sokkal ajanlottabb, mint magunk irni valami JS-t, vagy nagyobb projekt eseten valami framework, React, Vue vagy nem tudom.
-
fordfairlane
veterán
Az OO remek találmány, de a Javascript (ES6, typescriptről nem tudok nyilatkozni) classokkal sok probléma van.
1. Maga az osztály teljesen felesleges, ha csak egyetlen példányt kell belőle gyártani. Csak egy újabb felesleges absztrakció.
2. Ha több példányt kell csinálni, akkor sincs rá szükség, ha nem használod a típusellenőrzést (Ha típuskonvertálást használsz, az meg valószínűleg tervezési hiba), Javascript alatt simán factory functionnel tudsz objektumokat sorozatgyártani.
3. Javascript alatt a new operátor (illetve az elhagyása) problémás a dinamikus this binding miatt.
4. Javascript alatt a class csupán syntactic sugar, ugyanaz a behavior-delegation van a háttérben, mint class nélkül, construktor functionnel a protottype-ra ráhúzott metódusoknál. Persze a class összeszedettebb szintaxis, de ugyanúgy működik (pl. menet közben átdefiniálhatsz metódusokat).
5. Az öröklés, mint OO kódújrafelhasználás súlyosan problémás módszer, különösen akkor, ha felülbírálsz metódusokat, és nem a SOLID elveknek megfelelően.Hirtelen ennyi jut eszembe.
-
martonx
veterán
Nem értek egyet. Illetve bizonyos esetekben.
Attól rosszul vagyok mikor valaki egy kis egyszerű honlaphoz is typescriptben, meg anyámkínja írja meg a classait, amiket összességében 1-200 sornyi js-el össze lehet hozni, még ha spagetti is a kód (már persze milyen az a spagetti kód, amikor maximum 200 sornyi kódról beszélünk). Aztán mikor valakinek odaadják, hogy tessék javítsad, vagy vegyél fel plusz egy eventhandlert, akkor órákig tart a környezet belövése.
Komolyabb SPA-knál, NodeJS-ről nem is beszélve maximálisan van létjogosultsága az egész nagy infrastruktúrás cuccnak, más kérdés, hogy pont azt az előnyét veszíti el a Javascript, ami a scriptnyelvek előnye, hogy gyorsan, könnyen összedob bennük valamit az ember. Ha már kódot akarok fordítani, meg típust ellenőrizni, és komolyan OOP-zni, akkor személy szerint inkább megírom C#-ban (NodeJs helyett, SPA-nál nyilván marad a JS mint egyetlen alternatíva). -
Zedz
addikt
válasz
PumpkinSeed #6692 üzenetére
Szerintem sincs különösebben hozzáadott értéke. Meg úgy alapjában véve az OOP is túl van kapva. De ez nagyon saját vélemény.
-
Doink
aktív tag
válasz
maestro87 #6690 üzenetére
Ezt a fát nem akarod kiiratni mert azt látod a böngészőben F12->source. <html> a fa csúcsa, annak van 2 gyereke <head> <body> és így tovább. A belső adatszerkezet lesz egy fa ahogy a gép tárolni fogja a memóriában hogy gyorsan tudj benne keresni és módosítani.
Ennek a libnek meg pont az a lényege hogy css selectorokkal tudj keresni/módosítani ebben a html-ben és ne kelljen stringkezelési műveletekkel bajlódni.
Ha mégis be szeretnéd járni a fát akkor a a dokumentációban találsz olyan metódust hogy .children() ami visszadaja egy node közvetlen gyerekeit és így már adja magát hogy rekurzívan elég egyszerű bejárni.A részfát úgy értettem hogy ha van az oldalon egy ilyened és neked kell a price és a name
<!-- többmillió html kód felette -->
<div id="product">
<p class="price">1</p>
<p class="name">name</p>
</div>
<!-- többmillió html kód alatta -->és amúgy az oldalon még van ezer más html tag mindenfelé akkor azt így csinálod:
var $ = cheerio.load(html);
var product = $("#product");
var result = {
price: product.children(".price").text(),
name: product.find(".name").text()
}és nem ezt:
var $ = cheerio.load(html);
var result = {
price: $("#product > .price").text(),
name: $("#product > .name").text()
}mert így kétszer végig fog menni az egész fán megkeresni a #product-ot.
Ettől függetlenül a cheerio oldalán van elég sok példa amit érdemes lenne átfutnod. -
Doink
aktív tag
válasz
maestro87 #6688 üzenetére
A fenti kódot nodejs-ben futtattam mert a lényegi rész ugyan az google scriptben is:
var cheerio = cheeriogasify.require('cheerio');
function run() {
var response = UrlFetchApp.fetch("https://www.gearbest.com/smart-watches/pp_362705.html");
var $ = cheerio.load(response.getContentText());
var result = {
url: $("meta[property='og:url']").attr('content'),
price: $(".price_area > .goods_price > .my_shop_price").data('orgp'),
name: $(".goods-info-top > h1").text()
}
Logger.log(result);
}A cheerionak lassabbnak kell lennie amíg csak pár adatra van szükséged, ettől függetlenül így is elég gyors és ugyan úgy lehet rajta gyorsítani ahogy jquery-ben is tudsz (nem az egész fában keresel hanem csak részfában). Az hogy a google script-re milyen korlátozások vannak és ott miért ilyen lassú már maga az url lekérdezés is annak neked kell utánanézni, nodejs-ben 180ms alatt végez a felparseolással és az eredmény kiírással, google scripben pedig ugyan ez a művelet több mint 10 másodperc.
-
maestro87
őstag
Köszi, de hibát dob ki:
"TypeError: (class)@10da0984 nem egy függvény, hanem egy undefined. (9. sor a(z) „cheerio_gasify” projekt „gasify” fájljában)"
Egyébként az egyes sorok mit csinálnak a te kódban, mert eléggé megvariáltad?Vagy miben másabb?
Más: Ott sajnos nem mindig a helyes ár jelenik meg.
Például ha email only címkével van ellátva, akkor az oldal forrásában itt található a helyes ár:
<span class="my_shop_price" data-orgp="49.99" style="color:#CC0000; font-size:28px; font-weight:bold">47.99</span>
[link]
Tehát innen hogy tudom kiszedni a 47.99-et?
A termék nevét meg innen kellene:<h1 style="display:inline;">Original Xiaomi Mi Band 2 Smart Watch for Android iOS</h1>
<span class="allProperty"> -<strong> BLACK</strong></span>Amúgy ennek a függvénynek nem kellene gyorsabban működnie a string-es megoldásomnál? Mert kétszer lassabban fut le...
-
Doink
aktív tag
válasz
maestro87 #6685 üzenetére
Szia, sima css selectorokkal:
var request = require('request');
var cheerio = require('cheerio');
request('https://www.gearbest.com/smart-watches/pp_362705.html', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
var url = $("meta[property='og:url']").attr('content');
var price = $("meta[property='og:price:amount']").attr('content');
console.log(url, price);
}
}); -
fordfairlane
veterán
válasz
PumpkinSeed #6683 üzenetére
Csak az osztályba rakásról eszembe jutott Douglas Crockford véleménye a ES6 osztályokról. Én messze nem vagyok olyan képzett a formális nyelvekben, de tényleg valahogy ritka "ugly" konstrukciók.
-
maestro87
őstag
Ezt a cheerio lib-et hozzáadtam a projektemhez.
A példa program működik is, de honnan tudom, hogy miket lehet lekérdezni?
Például, hogy tudom lekérdezni ennek a terméknek a nevét (nem a title-t, mert az másabb), árát, megjelenített kép linkjét stb...?function cheerio()
{
var cheerio = cheeriogasify.require('cheerio');
var response = UrlFetchApp.fetch("https://www.gearbest.com/smart-watches/pp_362705.html");
var $ = cheerio.load(response.getContentText());
Logger.log($('title').text());
} -
martonx
veterán
válasz
PumpkinSeed #6683 üzenetére
Úgy sejtem poén akart lenni, az osztályharc.
-
PumpkinSeed
addikt
válasz
fordfairlane #6682 üzenetére
En mint eddig csak React-et ES6-al hasznalo ember nem ertem miert irod ezt? Szamomra sokkal atlathatobb az egesz. Legtobbszor mikor ES5-t kellett hasznalni inkabb hagytam az egeszet. Nyilvan jobban tudod miert mint en, mint mondottam nem vagyok topon ezen a teren. De szeretnem megtudni miert mondod ezt.
-
Jim-Y
veterán
En ezt valahogy igy oldanam meg. Kicsit objektumorientaltabb.
class DataSourceIndexedDB extends EventEmitter {
get MESSAGES() {
return {
CONNECTION_ERROR: 'error',
DATABASE_OPENED: 'db-opened'
}
}
constructor(databaseName) {
this._dbName = databaseName;
this._database = null;
}
openDatabase() {
const request = indexedDB.open(this._dbName, 1);
request.onerror = this.onConnectionError.bind(this);
request.onsuccess = this.onConnectionSuccess.bind(this);
}
onConnectionError(event) {
this.emit(this.MESSAGES.CONNECTION_ERROR, {
code: event.target.errorCode
});
}
onConnectionSuccess(event) {
this._database = event.target.result;
this.emit(this.MESSAGES.DATABASE_OPENED);
}
getObjectStore(storeName, mode) {
const tx = this._database.transaction(storeName, mode);
return tx.objectStore(storeName);
}
}
const database = 'xyz';
const table = 'xyz';
const indexedDB = new DataSourceIndexedDB(database);
// might be automated in constructor
indexedDB.openDatabase();
indexedDB.on(indexedDB.MESSAGES.DATABASE_OPENED, () => {
const store = indexedDB.getObjectStore(table, 'readwrite');
const request = store.getAll();
request.onsuccess = (event) => {
const data = event.target.result;
// do smtg with data
};
request.onerror = (event) => {
// error handling
}
}); -
martonx
veterán
Hehe, ezt láttátok már? https://stackoverflow.com/questions/245062/whats-the-difference-between-javascript-and-java/245073#245073
A második legnépszerűbb választ figyeljétek
-
Sziasztok! Adott az alábbi metódus. Mire kéne fűznöm az
onerror
-t, hogy meg tudjam hívni benne a deferred object-en areject()
-et? Próbáltam már mindenre, de ha direkt rossz adatbázis nevet vagy tábla nevet adok meg, akkor nem fut bele azonerror
-ombadataSourceIndexedDb = function(databaseProp, tableProp){
this.getData = function(){
var open = indexedDB.open(database, 1);
var data;
var defer = $.Deferred();
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readwrite");
var store = tx.objectStore(table);
// Query the data
var getAllData = store.getAll();
getAllData.onsuccess = function() {
data = getAllData.result;
defer.resolve(data);
};
tx.onerror = function(error){
defer.reject(error);
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
return defer;
};
var database = databaseProp;
var table = tableProp;
dataSource.call(this);
}; -
Doink
aktív tag
válasz
maestro87 #6674 üzenetére
Azért nem működik mert szerver oldalon lehúzol egy stringet valahonnan és azt még fel kéne parse-olni hogy ne szövegként kelljen kezelni hanem fába legyen rendezve mint a DOM.
Erre én kb csak a cheerio nevű lib-et ismerem de szerintem bármilyen xml parser megteszi ha az oldal valid. -
maestro87
őstag
Akkor itt egy ilyen oldal ami ezeket a tagokat tartalmazza:
<meta property="og:site_name" content="www.banggood.com"/>
<meta property="og:description" content="Only US$14.44, buy best ANENG AN8002 Digital True RMS 6000 Counts Multimeter AC/DC Current Voltage Frequency Resistance Temperature Tester ℃/℉ sale online store at wholesale price.US/EU warehouse."/>
<meta property="og:type" content="product">
<meta property="og:title" content="ANENG AN8002 Digital True RMS 6000 Counts Multimeter AC/DC Current Voltage Frequency Resistance Temperature Tester ℃/℉">
<meta property="og:url" content="https://www.banggood.com/ANENG-AN8002-Digital-Ture-RMS-Multimeter-ACDC-Current-Voltage-Frequency-Resistance-Temp-Tester-p-1145700.html">
<meta property="og:image" content="https://img.banggood.com/thumb/view/oaupload/banggood/images/F4/8C/36c71d9d-edb6-402a-abf7-419251b4a5c6.jpg">Ezekből szeretném kinyerni a "content"-et.
De most meg csináltam string-es műveletekkel, ami működik ugyan, csak ha van erre valami beépített függvény, azért mégis jobb lenne azt használni.
function openGraph(url, type)
{
var response = UrlFetchApp.fetch(url);
var content = response.getContentText();
var preString = '<meta property="og:'+type+'" content="';
var searchString = '"';
var preIndex = content.indexOf(preString)+preString.length;
var searchIndex = preIndex + content.substring(preIndex).indexOf(searchString);
return content.substring(preIndex, searchIndex);
}
//eredmények kiíratása:
function onEdit()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var url = "https://www.banggood.com/ANENG-AN8002-Digital-Ture-RMS-Multimeter-ACDC-Current-Voltage-Frequency-Resistance-Temp-Tester-p-1145700.html";
Logger.log(openGraph(url, 'site_name'));
Logger.log(openGraph(url, 'description'));
Logger.log(openGraph(url, 'type'));
Logger.log(openGraph(url, 'title'));
Logger.log(openGraph(url, 'url'));
Logger.log(openGraph(url, 'image'));
}Illetve az a baj még ezzel, hogy ha a webfejlesztő egy szóközzel többet tesz valahová (mint itt a
site_name"
és a"content
között), akkor már nem működik jól.
Szóval ezen adatok kinyerésére nincs valami atom biztosan működő beépített függvény?A Google Script amúgy Javascript alapú (pl. google táblázatot lehet vele okosítani), de úgy néz ki, hogy vannak olyan JS utasítások amit vagy nem ismer, vagy csak én használom rosszul őket.
-
Jim-Y
veterán
válasz
maestro87 #6671 üzenetére
Szerintem csak
1: az eredeti kerdesed csak annak vilagos aki epp azzal foglalkozik amivel te
2: kevesen vannak akik ezzel a temaval foglalkoznakPl nekem sem vilagos hogy mire is van szukseged. Olyan mintha egy mezei URL-bol kene valamit kinyerned, de abban nem szokott "og:image" lenni szoval megiscsak valami mas url-rol van szo. A google script nem tudom pontosan, hogy micsoda. Szoval szerintem csak nem vilagos a kerdes es ezert sem valaszol ra senki. Az is lehet hogy a kerdesed nem javascript specifikus inkabb valami XY (google script vagy fene se tudja mi) specifikus.
-
Doink
aktív tag
A egyik megoldás az hogy ígéretet (Promise) adj vissza és belül az onsuccess-nél resolve-old, onerror-nál meg reject-eled.
this.getData = function(){
return new Promise(resolve,reject) => {
let query = db.valami_async_művelet()
query.onsuccess = function(result){
resolve(result)
}
query.onerror = function(err){
reject(err)
}
}
}Így fogod tudni meghívni:
ValamiService.getData().then((result) => {
// beteljesült az ígéret és a result-ban lesz az eredmény
}).catch(error) => {
// hiba
});Másik elegáns megoldás ha cold observable-t használsz (rxjs).
-
Karma
félisten
Az aszinkron működést nem tudod megkerülni, úgyhogy olyan getData függvényt, amit egyszerűen szinkron módon meghívsz és eredményeket ad vissza, lehetetlen írni. (Nem is feltétlen baj.)
Van egy pár lehetőséged, az egyik legegyszerűbb, ha adsz egy callback paramétert a getData függvényednek. Ez például egy olyan kétparaméteres függvény, aminek az első paramétere a futáskor történt hiba (lehet `null` is ha minden szép), a második pedig a tényleges adat.
A lényeg, hogy az indexedDB-s kódod az utolsó onsuccess handler végén meghívja ezt a függvényt, így tudod feldolgozni az eredményt.
Például:
this.getData = function(callback){
var open = indexedDB.open(database, 1);
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readonly");
var request = tx.objectStore(table).getAll();
request.onsuccess = function() {
callback(null, request.result);
};
request.onerror = function() {
callback(request.errorCode);
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
open.onerror = function() {
callback(open.errorCode);
}
};Máshol meg így hívod:
valami.getData(function(err, data) {
if (err) {
console.log("Error while reading data", err);
return;
}
console.log("Found data", data);
});Ha meg tisztább kódot akarsz, keress egy promise wrappert az IndexedDB-hez szerintem. Persze azt is meg kell tanulni használni először.
Amúgy sose használtam az IndexedDB-t, de a megérzésem azt mondja, hogy nem kéne minden lekérdezésnél nyitni-zárni.
-
Sziasztok! IndexedDb a téma, hogyan adhatom vissza a getData() metódussal a táblában található elemeket?
Az async működést nem igazán vágom
this.getData = function(){
var open = indexedDB.open(database, 1);
var data;
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readwrite");
var store = tx.objectStore(table);
// Query the data
var getAllData = store.getAll();
getAllData.onsuccess = function() {
data = getAllData.result;
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
return data;
}; -
maestro87
őstag
Tudom, hogy ez nem működik. Ezt a kódot múltkor kaptam, mikor a böngésző eszköztárra kellett egy ilyen "könyvjelző script", ott működik, de a google script már nem ismeri. Azt akarom megcsinálni, hogy ha a táblázat egy cellájába beírok egy url címet, akkor a mellette lévő cellákba automatikusan írja be az og:title és az og:image tagokat.
Már minden létező kifejezésre rákerestem, de nem találtam egyszerű megoldást, csak ezt a szolgáltatást ami azt hiszem ezt csinálná meg helyettem, pontosabban ezen videó alapján már könnyen megtudnám csinálni.
De tényleg ilyen bonyolult lenne megírni, hogy jobban megéri beregisztrálni egy ilyen oldalra?
Megköszönném ha valaki megadná a helyes kódot ezen meta tagok kinyerésére, mert én csak a sötétben tapogatózok. C-nyelvet ismerem csak, azt se 100%-osan. -
maestro87
őstag
Ezt Google Script-re hogy lehetne lefordítani?
var img = document.querySelector('meta[property="og:image"]').content;
Egy URL-ből szeretném kinyerni az og:image meta tagot és a kép linkjét betenni egy cellába, de sehogy sem jön össze, nem találtam rá megoldást.
-
martonx
veterán
válasz
PumpkinSeed #6658 üzenetére
Tökéletesen egyetértek, ezért is írtam, hogy ez inkább csak hype, mintsem tényleges előny. Bár autentikáció mögött még sose használtuk. Pár micro servicünk fut Lambdában, igaz productionben.
-
PumpkinSeed
addikt
válasz
martonx #6648 üzenetére
Annyit azert hozzatennek az AWS serverless-hez, hogy hiaba mondja azt, hogy nincs szerverrel valo szarakodas, de helyette bejon AWS-el valo szarakodas. Ugyanis ha lambda fuggvenyeket hasznalsz akkor kell API Gateway, de ha az authentikacio nem AWS Cognito akkor az API Gateway egy remalom, amit lecserelhetsz Kong API Gateway-re, de akkor meg az AWS Lambda lesz nehezkes. Szoval maga az elgondolas jo, mi hasznaljuk is prod-ban, de kin szenvedes foleg ha mar egy meglevo kodbazisnal akarod hasznalni.
-
maestro87
őstag
válasz
maestro87 #6656 üzenetére
A függvényemben meg nem működik rendesen.
20 órát 22-re konvertálja, mikor 14-re kellene. Mit rontottam el?function convertTime()
{
var range = SpreadsheetApp.getActiveRange();
var data = [];
var output = [];
data = range.getValues();
for(var i = 0, iLen = data.length; i < iLen; i++) {
var HongKong = m.moment.tz(data[i][0].toString(), 'Asia/Hong_Kong');
var Budapest = HongKong.tz('Europe/Budapest').format('YY/MM/DD HH:mm');
output.push([Budapest]);
}
range.offset(0,1).setValues(output);
} -
maestro87
őstag
válasz
DNReNTi #6654 üzenetére
Végül ezzel a leírással sikerült.
-
maestro87
őstag
Sziasztok!
Van egy
data
tömböm, amibe dátumokat olvasok be. Hogy lehetne megmondani a függvénynek, hogy UTC+8-ban vannak ezek a dátumok?A függvény a következő (google apps script):
function convertTime()
{
var range = SpreadsheetApp.getActiveRange();
var data = [];
var output = [];
data = range.getValues(); // kijelölt cellák értékeinek beolvasása a data tömbbe
for(var i = 0, iLen = data.length; i < iLen; i++) {
var timeUTC2 = Utilities.formatDate(data[i][0], 'GMT+2', 'yy/M/d HH:mm');
output.push([timeUTC2]);
}
range.offset(0,1).setValues(output); // a mellette lévő oszlopba rakja az eredményeket
}A függvény működik, a probléma csak az, hogy a google táblázat UTC+2-be van beállítva és alapértelmezetten (nem akarom átállítani) ezt az időzónát veszi alapul mindenhol, így a kimenet ugyanaz lesz mint a bemenet.
Sajnos a google táblázatos topik halott, így inkább ide írtam a nyelv javascript alapja miatt. -
Zedz
addikt
válasz
martonx #6651 üzenetére
Jaaa én azt hittem a serverless megoldás az az, hogy full 3rd party alkalmazások szolgálják ki a szervered nagy részét. Mondjuk Auth0, Firebase, ha van push noti mondjuk mobilra akkor megint valami, szóval amolyan BaaS-ok együttese.
Amiket leírtál azokkal tisztában vagyok. ( mielőtt még inkompetensnek néztek
)
A fentebb említett dolgokkal pedig eddig én csak megszívtam.Mondjuk sok framework alapból ad már egy logint, mögé csapni egy DB-t sem olyan nagy meló, csak valamiért kezdünk ezekről leszokni.
-
martonx
veterán
A serverless dolog tök jól, egyszerűen, működik. És csak egy hülye buzzword, a háttérben nyilván ott van a szerver. A serverless inkább csak arra utal, hogy abszolút nem kell foglalkoznod a szerverrel, de még csak a terheléssel, skálázással se. Egyedül annyi a rákfenéje, hogy előre abszolút megbecsülhetetlen a költség igénye. Havi X másodperc futás ingyenes, utána másodpercenként ennyi-annyi. De őszintén ki fogja tudni másodpercben előre felbecsülni, hogy napi X db request kiszolgálása mégis hány másodpercbe fog telni?
Ettől függetlenül kis terhelésű api-k esetében valóban kb. ingyenes alternatíva tud lenni. -
martonx
veterán
Szerintem kevered a szezont a fazonnal. Az Azure / AWS / akármi nem egyenlő egyes 3rd party service-ekkel, mint pl . Auth0, sőt semmi közük nincs egymáshoz, hacsak annyi nem, hogy az Auth0 is futtatja valahol a szolgáltatását
Azaz, hogy az authentikációs rétegedet kiváltod-e Auth0-val vagy sem, annak semmi köze nincs ahhoz, hogy egyébként hol futtatod a komplett rendszert.
Felhős adatbázis pedig csak akkor buli, ha az alkalmazásod is ugyanott van a felhőben, ugyanabban az adatközpontban, különben a hálózati késleltetés miatt természetesen nagyon belassul az adatátvitel. -
Zedz
addikt
válasz
martonx #6644 üzenetére
Lehet én vagyok az ostoba, de amikor próbáltam ezeket a 3rd party megoldások, mint pl Auth0 vagy egy adatbázis, 1 heti szívás után mindig ott lyukadtam ki, hogy a fene vigye el az egészet, meg amúgy is fizetős lesz X dolog után, inkább megírom magamnak.
Persze mindig kacérkodok a dologgal, aztán marad a jól bevállt vps és a saját váram építése.
-
-
martonx
veterán
AWS-hez képest kb. egy árban van. Van ami Azure-ban olcsóbb, van ami AWS-ben, de mintha általánosságban egy picivel mintha az Azure olcsóbb lenne.
Ami miatt maszekban Azure-t használok, hogy nagyon könnyen össze lehet havi 100 eurónyi díjat kalapozni, MPN-nel, akár csak egy Visual Studio Online regisztrációval, MSDN tagsággal.
Szimpla webapp hosztolásra viszont szvsz elég drága (erre persze az AWS, és bármi más nagy cloud is drága), cserébe baromi kényelmes, build automatizációkba könnyedén beilleszthető, bármeddig skálázható. Ha meg már úgy is van havi 100 eurónyi előfizum, akkor meg már annyira nem is fáj, hogy mibe kerül a hosztolás.
Illetve mostanában jelent meg a serverless (figyelem új buzzword az informatikában) hosztolás, amiben AWS jár az élen, de Azure-ban is kezd megjelenni. Ezzel amíg szinte nulla az oldalad terhelése, gyakorlatilag ingyen tudod hosztolni. Viszont ez olyan, mint egy kapu drog, mert mihelyst megugrik a terhelés, hirtelen a gatyádat is ki fogod fizetni nekik. -
-
DNReNTi
őstag
Sziasztok,
Szeretnem megoldani, hogy az alkalmazasok UI retegeben keletkezo exception-ok is visszakovethetoek legyenek, illetve akar valami alert is beallithato legyen ha kiugroan magas szamu hiba van. Hogyan lenne a legjobb megoldani azt, hogy barmilyen kivetel kovetkezik be, azt el tudjam kuldeni a szervernek? A barmilyet azert emeltem ki, mert peldaul az aszinkron hivasok hibai le vannak kezelve, nem torik el a UI, de szeretnem, hogy ettol fuggetlenul lassuk ezeket egy naploban es ha kell vissza tudjuk keresni mi tortent. Tapasztalat? Javaslatok? Koszi!
-
Jim-Y
veterán
https://jsfiddle.net/bnrmss1j/1/
Ha nem ez volt a kerdes akkor meg csak siman jobban kell kerdezni ^^
-
Sziasztok! Adott egy saját komponens, aminek vannak publikus metodusai. jQuery objektummá kell konvertáljam, ami megy is
$drop = $(dropdown);
, viszont így az alap komponens metódusai elvesznek. Hogyan csináljak belőle úgy jQuery object-et, hogy közben megmaradnak a metódusai?$.extend
-el próbálkoztam, de nem jártam sikerrel -
válasz
fordfairlane #6636 üzenetére
Köszönöm. Az arguments-el sikerült megoldani.
-
Metódus túlterhelésre mik a bevett szokások javascriptben? Hogyan valósítsak meg egy olyan functiont aminek 0 és 1 paraméterrel is működnie kell? Nem hozhatok létre két függvényt erre a célra.
-
martonx
veterán
Asp.Net Core óta Asp.Net Core-al is lehet faék REST API-kat csinálni. Egy rakás ilyen micro servicem fut AWS Lambdában
A példáid teljesen jók, én viszont visszább lépénék párat. Először ES6-ot, (ES7-et) tanulnám, nagy hangsúlyt fektetve az npm-re (esetleg webpack, netán gulp). Ezekhez én még szerver oldalt se csinálnék, egy szimpla VS Code és npm light-server-el hostolnálm. Amikor ezek készség szinten mennek, akkor van értelme bármilyen értelmesebb szerver oldalt alájuk tenni.
-
Zedz
addikt
which implements the model–view–controller (MVC) pattern
Idézet a linkedből. Nincs olyan, hogy "ilyen mvc". Ez ugyan az mint amit linkelte, totálisan más mint amiről amúgy beszélünk.Miért akarod mindenképp JS-sel megoldani? Mutasd meg a munkahelyden, hogy szebben sikerült megoldani, mint ahogy kérték.
ASP.NET MVC-től szintén független a Javascript. JS tudás nélkül is neki tudsz esni, tekintve, hogy maximum frontend oldalon fogod használni, aztán onnantól meg a szerver közel mindegy. By the way martonx kolléga az ASP.NET MVC guruja, ő többet tudna róla mesélni, hogy hogyan is kell hozzá fogni.
-
Jim-Y
veterán
En nem mondom, mint a tobbiek, hogy ne igy csinald. Ezt a feladatot kaptad igy csinald szepen meg, bar agyuval losz a verebre semmilyen dropdown a mai vilagban nem igy mukodik mint ahogy ezt csinalod. Ettol fuggetlenul kalapald valahogy ossze es utana kezdj el egy normalis eletszeru feladaton dolgozni.
Mondok 1-2 peldat:
1: js tanulasra -> irj egy backend-frontend alkalmazast. A backend legyen egy sima faek egyszerusegu REST szerver. express vagy koa peldaul. Ne csinaljon tobbet mint regisztraljon 1-2 endpointot es adjon vissza par adatot. A frontend legyen angular vagy react es ne csinaljon mast mint kommunikaljon a backenddel kerje el az adatot es jelenitsen meg belole egy chart-ot. Pl d3-al. Ez egy egyszeru kezdoknek is egy nap alatt veghez viheto feladat es erinti azokat a dolgokat amikkel nap mint nap fogsz talalkozni front-end fejlesztokent. AJAX, charting, FE framework stb..
2: css tanulasra -> csinalj egy olyan komponenst ami egy jobb oldali menu sort implemental. A kepernyo jobb oldalan teljes magassagban egy mondjuk 70 pixel szeles savban ikonokat tud tarolni, pont mint egy navigacios menu. A kihivas benne az, hogy ez a sav fix 70 pixel szeles legyen DE ha tobb ikont teszunk bele mint amennyi latszodna az aktualis bongeszo meretetol fuggoen akkor a lelogo ikonokat eltunteted (overflow:hidden) viszont ha raviszed az egeret a 70px szeles savra akkor baloldalon kinyilik a panel es lathatova valnak a nem latszodo ikonok.
Lehet nem ezeket fogod csinalni vegul, de szerintem ezek sokkal inkabb eletszeru feladatok mint egy dropdown implementalasa js-ben.
-
Zedz
addikt
Nem értem a problémát. A HTML rész kigenerálása valamilyen template enginnel (blade, pug, jinja, whatever) az egy dolog. Erre ráhúzni a fentebb linkelt CSS-t, megint más. Független a kettő egymástól.
MVC fejlesztés lesz a fő feladatom
Ez a kijelentés így hibás. Az MVC egyfajta logikai struktúra. Ez szintén független a témánktól.ehhez szükséges HTML, CSS, Bootsrap 3, jQuery, JS tudást kell felszednem
Pure CSS megoldás fentebb, de a Bootstrap is rendelkezik beépített dropdownnal. Az más kérdés, hogy ha jól emlékszem akkor ők JS-sel oldják meg, de szigorúan magány véleményem szerint a bootstrap semmilyen szempontból sem követendő példa.Milyen szinten akarsz JS-t tanulni?
Azért kérdeztem, mert ajánlottam volna olvasni valót. -
Zedz
addikt
Milyen szinten akarsz JS-t tanulni?
-
Sziasztok! JS-t tanulgatok és akadt egy problémám. Custom dropdown komponenst kell létrehoznom, ami félig meddig sikerült is, de valamiért a buttonra kattintva csak egy pillanatra nyílik le a legördülő menü, majd eltűnik az éterben. Mi lehet az oka?
-
válasz
gyurkikrisz #6613 üzenetére
Általában ez szokott lenni igen. Egy api és egy különálló kliens.
-
Zedz
addikt
Sziasztok,
Expresses alkalmazásokat hogyan szoktatok tesztelni? Mocha + Chai?
-
martonx
veterán
válasz
gyurkikrisz #6613 üzenetére
Igen.
-
gyurkikrisz
őstag
Egy meglévő ExpressJS webalkalmazás felhasználói felületét szeretném ReactJS alapokra átültetni.
Még az elején vagyok a tanulási folyamatnak, de ha jól értelmezem, akkor ennek az a "szabványos" módja, hogy az ExpressJS részt átalakítom egy REST API-vá, amivel egy külön ReactJS alkalmazás kommunikál? Ennyire elkell szeparálnom a backendet a frontendtől?
-
tick
aktív tag
Ezt segítenétek kérlek megérteni? A function egy objectként működik és mégis van egy "default" értéke? -
tick
aktív tag
válasz
martonx #6609 üzenetére
Köszönöm mindkettőtök válaszát, eszembe nem jutott valamiért hogy erre így rákeressek.
Végül a validator elnevezésű npm packaget találtam, ennek ötlete mentén megcsináltam a sajátom. Illetve amelyik classnál szükséges ott van egy static validate method, ami lefut a constructor elején is. -
martonx
veterán
Expresshez nem értek, de az MVC rendszerekben szokott előre kialakított szerver oldali validáció lennie out-of-the-box, azaz én a helyedben első körben utána olvasnék, hogy Expressben milyen szerver oldali validációs megoldások vannak alapból.
Ha pedig nincs benne, akkor ideje valami más MVC megoldás felé fordulni. -
Jim-Y
veterán
module.exports = [
// ========== CREATE ==========
{
path: '/api-endpoint',
method: 'post',
controller: 'api-endpoint-controller',
action: 'doSomething',
params: {
id: 'number',
name: 'string',
etc...
}
}
];module.exports.queryParamsValidator = function(types) {
return function (request, next) {
for ({ key, value } in request.queryParams) {
if (types[key] && !isTypeEquals(types[key], value)) {
return this.throw(403);
}
}
next();
}
}Persze ez nem egy mukodo kod, csak egy pszeudokod, de hatha segit.
-
Jim-Y
veterán
Csinalni egy middleware-t ami ellenorzi. Aztan a route definicioban megadhatod, hogy milyen parameterek manadatory-k es , hogy azoknak milyen a tipusa. Ha a mandatory parameterek tipusa nem jo akkor a middleware nem engedi tovabb a requestet hanem logol, meg HTTP 403.
Pszeudokod: (majd egy masik hsz-ben mert keson kezdtem el szerkeszteni, pill)
-
tick
aktív tag
válasz
martonx #6604 üzenetére
Köszönöm szépen. Csak proposalokat láttam az issueban. Van egy-két 3rd party package ami elvileg megoldaná a problémám, de annyira vad vizekre nem akarok evezni.
TypeScripttől függetlenül véleményt szeretnék kérni:
Express query paramétereit szeretném ellenőrizni. (REST) Van egy adag ami kötelező, meg egy másik adag opcionális. A többire pedig nem vagyok kíváncsi.
Ha mindet egyesével ellenőrzöm hogy kapott-e értéket, el lett-e küldve egyáltalán, megfelelő típusú-e, megfelel-e minden paraméternek stb., majd errort dobálok ha nem, akkor egy elég undorítóan hosszú fájlom lesz.
Ezt ti hogyan szoktátok kezelni? Van több ötletem is:
-Hagyni a fenébe, viszont sok ellenőrzés ismételhető lenne máshol is.
-Classokat létrehozni típusonként, majd mindet az előző postom alapján példányosítani, így ellenőrizve lesznek
-Szintén classok, de csak statikus validáló függvénnyel -
fordfairlane
veterán
Typescripthez nem értek, de az instanceof talán ebben az esetben is használható.
-
martonx
veterán
Amit belinkeltem thread-et ott mintha lettek volna workaround-ok, utólagos megoldások ezeknek a típusellenőrzéseknek a belegenerálására. Igen, ha neked tényleg ez kell, akkor valóban nincs más hátra, mint vanillajs-ként tekinteni a ts generált kimentére (mert hiszen az is).
-
tick
aktív tag
válasz
martonx #6602 üzenetére
Értem hogy sima js lesz belőle és a hasznos dolgok nagyrésze el is tűnik. Azt reméltem hogy van valami compiler paraméter amin átsiklottam ami automatikusan hozzátenné a típus ellenőrzéseket.
Lényegében akkor minden egyes class esetén típusellenőrzést ugyanúgy meg kell csinálni minttha vanilla js lenne, illetve ha felhasználom egy másikban, akkor példányosítani kell. Valahogy így mint lent. (tudom hogy rossz példa) Vagy van jobb megoldás?
class Name {
name:string
constructor(str:string) {
if (typeof str !== 'string') {
throw new TypeError()
}
this.name = str
}
}
class Age {
age:number
constructor(n:number) {
if (typeof n !== 'number') {
throw new TypeError()
}
this.age = n
}
}
class Person {
name:Name
age:Age
constructor(i:IPerson) {
this.name = new Name(i.str)
this.age = new Age(i.n)
}
}
interface IPerson {
str: string,
n: number
}
console.log(process.argv[2])
let bar:IPerson = JSON.parse(process.argv[2])
let foo = new Person(bar)
console.log(foo) -
martonx
veterán
Nézd, a typescript javascriptté fordul, ami nem típusos nyelv (szerk. mielőtt valaki a fejemet veszi, pontosítok: nem erősen típusos), így elvárni, hogy futás közben is úgy viselkedjen, mint szerkesztés közben a typescript, elég naív elképzelés. Mindenesetre itt vannak workaroundok erre: [link] (gugli legelső találata volt)
-
tick
aktív tag
typescript esetén ki lehet valahogy kényszeríteni a runtime típus ellenőrzést vagy ez csak build meg compile alatt ilyen shiny?
Express request query paramétereket szeretném ellenőrizni hogy egy interface illik-e rá, de runtime alatt minden ellenőrzés eltűnik
Új hozzászólás Aktív témák
Hirdetés
- Törött, Hibás iPhone felvásárlás!!
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Azonnali készpénzes nVidia RTX 5000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
- Beszámítás! Apple iPad Pro 11 2024 1TB WiFi + Cellular tablet garanciával hibátlan működéssel
- Apple iPhone 13 Pro / 128GB / Gyárifüggetlen / 12Hó Garancia / 85% akku
Állásajánlatok
Cég: FOTC
Város: Budapest