A chat application made with Node.js, React and Socket.io.
- Clone repository
npm install
npm run build
To start the server, run node index.js
and navigate to http://localhost:3000/.
A chat application made with Node.js, React and Socket.io.
License: MIT License
A chat application made with Node.js, React and Socket.io.
npm install
npm run build
To start the server, run node index.js
and navigate to http://localhost:3000/.
io.on('connection')
-käsittelijä sisältää aika paljon koodia. Jos ajatellaan, että joku lukee tätä koodia ensimmäistä kertaa, voisiko siitä saada helpommin seurattavaa / luettavaa? https://github.com/TheDuckFIN/react-chat/blob/master/index.js#L41-L209Koodi on aika huonolaatuista, jos minulla olisi ollut kunnolla aikaa, olisin tutustunut tarkemmin mitä tapoja nodessa on jakaa koodia siististi (vrt. javan luokkarakenteet). Noden moduuleilla ilmeisesti pystyy ainakin jollain tasolla jakamaan koodia luokkiin.
io.on-lohkon sisällä voisi ideaalitilanteessa itseasiassa olla vain event-nappaajat jotka ohjaavat vastuun eri moduuleille/funktioille. Näin tulisi varmaan huomattavasti siistimpi rakenne.
nicknameValid
-funktio palauttaa tällä hetkellä eri lukuarvoja eri tilanteissa, joten sen kutsujan pitää tietää tarkasti, mitä arvoja funktiolta on odotettavissa: https://github.com/TheDuckFIN/react-chat/blob/master/index.js#L295-L317 Voisiko saman asian toteuttaa vähän eri tavalla? Jos kielenä olisikin Java, tekisitkö vastaavan funktion eri tavalla?Javassa käyttäisin ehdottomasti enumia. JavaScriptissä ei vieläkään ole kunnon enumeja, mutta löysin npm:stä muutamiakin vaihtoehtoisia kirjastoja joita olisi voinut käyttää. StackOverflow'sta löytyi kanssa muutama vaihtoehtoinen ratkaisu. En tiedä miksen mitään näistä ottanut projektissa käyttöön, ehkä en osannut valita mitä käyttää :D
serverMessage
-funktiolla on tällä hetkellä? https://github.com/TheDuckFIN/react-chat/blob/master/index.js#L254-L262msg-muuttujasta oli jäänyt näemmä var/let edestä pois, mikä johtaa siihen että msg on nyt globaali muuttuja. Hups.
Tarvittaisiin jonkinlainen tietokanta. Mieleen tuli heti ekana mongodb, mutta toisaalta tässä kohtaa voisi olla hyötyä myös relaatiotietokannoista.
PostreSQL:n käyttöön löytyy npm:stä kirjasto, jota käyttäisin relaatiotietokantatoteutuksessa. Hahmottelin seuraavaanlaista luokkakaaviota:
Serveripuolen koodi ja chatin protokolla kaipaa jokatapauksessa refaktorointia, niin lähtisin suunnittelemaan sitä tuon rakenteen pohjalta. En tarvitsisi enää muutenkaan messagecounteria ja channelcounteria, koska postresql hoitaa ID:t primary keyiden avulla.
MongoDB:n soveltuvuutta tähän tapaukseen en osaa nyt kunnolla arvioida, en ehdi sitä nyt googletella, ja olen vain hieman kokeillut mongon käyttöä yli vuosi sitten kouluun liittyen. Ilmeisesti mongo on kuitenkin node.js:n kanssa ollut aika käytetty tietokantatyyppi.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.