Skapa en appserver mot MySQL

By . Latest revision .

Du skall bygga en appserver med Node.js och Express som använder sig av MySQL för att presentera och uppdatera information från databasen.

Inuti databasen skall du delvis lösa uppgiften med transaktioner, lagrade procedurer, triggers och inbyggda funktioner.

#Förkunskaper

Du har jobbat igenom artiklarna “Node.js webbserver med Express” och “Databas appserver med Express och MySQL”.

Du kan även programmera i databasen via artiklarna “Transaktioner i databas”, “Lagrade procedurer i databas”, “Triggers i databas” och “Egen-definierade funktioner i databas”.

Du har även löst uppgiften “Node.js terminalprogram mot MySQL”.

#Introduktion

Det stora internationella företaget “Allans Mopeder” uppskattade ditt tidigare arbete och vill nu ha en webbaserad tjänst av dig. Det handlar fortfarande om en frontend till deras sälj- och distributionsdatabas.

Du har en ny databas att jobba på i allan1.sql och du hittar den i example/nodejs/allans-mopeder/allan1.sql. Kopiera den till din uppgiftskatalog.

Så här kan du läsa in SQL-kommandon till terminalen MySQL.

$ mysql -uuser -ppass mydb < allan1.sql

#Krav

  1. Skriv ett main-program som startar din server, döp det till index.js.

  2. Ditt program skall läsa av environment-variabeln LINUX_PORT och, om variabeln är definierad, använda dess innehåll för att starta servern på just den porten. Standardport är annars 1337.

  3. Ditt program skall skriva sitt PID till en fil som heter pid. När man kör kommandot kill $( cat pid ) (eller motsvarande på Cygwin) så skall din server stängas ned.

  4. Du skall kunna skicka med alternativ som säger till vilken databas programmet skall koppla upp sig till, och vilken användare och lösenord den använder. Det kan se ut så här node index.js --host localhost --user mos --password XXX --database mos.

  5. I routen / visar du en index-sida som innehåller länkar till vad man kan göra. Använd en stylesheet för din CSS-kod.

  6. På routen /view visar du samtliga produkter samt deras lagerstatus lokalt och centralt. Man skall kunna klicka på en produkt för att se detaljer om enbart den produkten.

  7. På routen /view/:id visar du informationen om en produkt, inklusive dess lagerstatus.

  8. När du visar en produkt så skall du också visa en textsträng som säger “hälsosam” när lagerstatus är över 5 produkter, “beställ” när lagerstatus är 1-4 och “slut” när lagerstatus är 0. Textsträngen visas både för lokalt och centralt lagerstatus.

  9. På routen /edit/:id visar du information om produkten i ett formulär. Om du postar formuläret så kan du uppdatera informationen i databasen. Du kan fritt uppdatera namn, lokalt lagerstatus och centralt lagerstatus via detta formulär, utan några restriktioner.

  10. Skapa en eller flera routes där du kan flytta mellan det lokala lagret till det centrala och vise versa. Du kan ange hur många produkter som kan flyttas. Det måste finnas produkter innan de kan flyttas.

  11. Skapa en logg-tabell som loggar varje flytt mellan de två lagren. Du kan logga varje förändring i de två lagren, på det viset kan man ha koll på vilka lagerförändringar som gjorts. Skapa en route /log som visar innehållet i logg-tabellen.

  12. Du skall använda dig av minst en transaktion, en lagrad procedur, en trigger och en funktion. Uppdatera filen allan1.sql så att den innehåller koden för att skapa dessa. Man skall kunna köra allan1.sql om och om igen, för att skapa om databasens tabeller.

  13. Validera din kod.

# Flytta till kurskatalogen
dbwebb validate express-sql
#dbwebb publish express-sql

Rätta eventuella fel som dyker upp och publisera igen. När det ser grönt ut så är du klar.

#Extrauppgift

Det finns ingen extra uppgift.

#Tips från coachen

Lycka till och hojta till i forumet om du behöver hjälp!

#Revision history

  • 2017-03-24: (A, mos) Första utgåvan.

Document source.

Category: javascript, nodejs, mysql.