Coder Social home page Coder Social logo

react-chat's Introduction

react-chat

A chat application made with Node.js, React and Socket.io.

How to use

  1. Clone repository
  2. npm install
  3. npm run build

To start the server, run node index.js and navigate to http://localhost:3000/.

License

MIT License

react-chat's People

Contributors

lakaniemi avatar

Watchers

 avatar

Forkers

reik nilportugues

react-chat's Issues

Reaktor-haastis ongelmakohdat

1) Serverikoodin "päähaara" eli 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-L209

Koodi 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.

2) 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

3) Mitä sivuvaikutuksia serverMessage -funktiolla on tällä hetkellä? https://github.com/TheDuckFIN/react-chat/blob/master/index.js#L254-L262

msg-muuttujasta oli jäänyt näemmä var/let edestä pois, mikä johtaa siihen että msg on nyt globaali muuttuja. Hups.

4) Jos serverin pitäisi säilyttää kanavat ja viestit käynnistyskertojen välillä, miten lähtisit toteuttamaan sitä? Huom: ei tarvitse toteuttaa, karkean tason ideointi riittää! :)

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:

luokkakaavio

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.