-
Notifications
You must be signed in to change notification settings - Fork 0
Einarbeitung Node.Js & Javascript [Paul Johne]
Um den aktuellen Stand des Verständnis über Javascript und Node.js geordnet festhalten zu können, werden beide Themen hier separiert. Zwar geht Javascript mit Node.js einher bzw. nutzt die Node.js-Laufzeitumgebung Javascript. in den einzelnen Abschnitten werden sowohl Mitschriften, als auch Übungen aufgezeigt.
Wie bereits in den Vorlesungen erwähnt, aber auch von Teammitgliedern empfohlen wurde, habe ich das Freecodecamp zur Einübung der Logik von Javascript genutzt. Ausschlaggebend waren die Arbeitsblätter, welche nicht 1:1 umgesetzt wurden, sondern mir als Anlaufstelle bereitstanden, um eigene Anwendungslogiken auszuprobieren.
(Aufgabenblatt 1):
const maxRating = 5;
var storeRatingAmout = 80;
let lastRating;
console.log(`maxRating: ${maxRating},
storeRatingAmout: ${storeRatingAmout},
lastRating: ${lastRating}`)
const addRating = (rating) => {
if (rating > maxRating) {
rating = maxRating
} else {
lastRating = rating
++storeRatingAmout
}
}
addRating(3)
addRating(2)
console.log(`maxRating: ${maxRating},
storeRatingAmout: ${storeRatingAmout},
lastRating: ${lastRating}`)
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const addingRandomRatingAmount = (n) => {
for (let x = 0; x < n; x++) {
let randomNumber = Math.floor(Math.random() * 6)
addRating(randomNumber)
console.log(`maxRating: ${maxRating}, storeRatingAmout: ${storeRatingAmout}, lastRating: ${lastRating}`)
}
}
rl.question('Bitte geben Sie eine neue Bewertung ein: ', function (answer) {
addRating(answer)
rl.close()
console.log(`maxRating: ${maxRating}, storeRatingAmout: ${storeRatingAmout}, lastRating: ${lastRating}` + '\n')
addingRandomRatingAmount(8)
})
(Aufgabenblatt 2):
const maxRating = 5
class Rating{
constructor(name, stars) {
this.name = name
if (stars > maxRating) {
this.stars = maxRating
} else if (stars < 0) {
this.stars = 0
} else {
this.stars = stars
}
}
}
let rating1 = new Rating("War richtig beschissen, neh?", 2)
let rating2 = new Rating("So gut wie MCI", -1)
let rating3 = new Rating("Screendesignbewertungen sind special", 8)
let ratingStorage = [rating1, rating2, rating3]
console.log(`Anzahl Bewertungen: ${ratingStorage.length} | Letzte Bewertung: ${ratingStorage[0].name} , Sterne: ${ratingStorage[0].stars}`)
console.log(`Anzahl Bewertungen: ${ratingStorage.length} | Letzte Bewertung: ${ratingStorage[1].name} , Sterne: ${ratingStorage[1].stars}`)
console.log(`Anzahl Bewertungen: ${ratingStorage.length} | Letzte Bewertung: ${ratingStorage[2].name} , Sterne: ${ratingStorage[2].stars}`)
let ratings = Object()
ratings.letzteBewertung = ratingStorage[ratingStorage.length - 1].name
ratings.stars = ratingStorage[ratingStorage.length - 1].stars
ratings.Amount = ratingStorage.length
const durchschnitt = (someArray) => {
let sum = 0
someArray.forEach((value) => {
sum += value.stars
})
return (sum/someArray.length)
}
console.log(`Aktueller Durchschnitt: ${durchschnitt(ratingStorage).toFixed(2)}`)
// Nr. 5: Scope
const hello = "hello"
const selbstgewaehlterName = () => {
const world = " World"
return hello.concat(world)
}
console.log(selbstgewaehlterName())
const aussagekraeftigerName = () => {
const world = " World" //muss nochmal definiert werden, da nur lokal in Funktion existiert
return world.concat(hello)
}
console.log(aussagekraeftigerName())
(Aufgabenblatt 3): JSON-Datenbasis aus "unsortedCities.json":
[
{
"id": 0,
"name": "Berlin",
"bundesland" : "Berlin",
"einwohner": 3769000
},
{
"id": 1,
"name": "Hamburg",
"bundesland" : "Hamburg",
"einwohner": 1845000
},
{
"id": 2,
"name": "Saarbrücken",
"bundesland" : "Saarland",
"einwohner": 178151
},
{
"id": 3,
"name": "Bremen",
"bundesland" : "Bremen",
"einwohner": 682986
},...]
Sortierer-Modul (auch im repository gespeichert für Beatdrinks):
function sortWithKey(comparatorKey) {
return (objA, objB) => {
if (objA[comparatorKey] > objB[comparatorKey]) {
return 1
} else if (objA[comparatorKey] < objB[comparatorKey]) {
return -1
} return 0
}
}
function sortWithPopulation(objA, objB) {
if (objA.einwohner > objB.einwohner) {
return 1
} else if (objA.einwohner < objB.einwohner) {
return -1
} return 0
}
module.exports = {
sortWithKey,
sortWithPopulation
}
Bearbeitung der Json-File:
/** set ref to both json-files and require the sortKeyComparator-module */
let refCitiesJson = require("./cities.json")
let refUnsortedCitiesJson = require("./unsortedCities.json")
const { sortWithPopulation, sortWithKey } = require("./sortKeyComparator")
/** testing accessibility of object[] */
comparatorKey = 'einwohner'
console.log("Einwohner in refUnsortedCitiesJson[1] " + refUnsortedCitiesJson[1][comparatorKey])
console.log("Einwohner in refUnsortedCitiesJson[1] " + refUnsortedCitiesJson[1].einwohner + "\n")
/** sort any Json with a defined key */
refUnsortedCitiesJson.sort(sortWithKey(comparatorKey))
refUnsortedCitiesJson.sort(sortWithKey('id'))
refUnsortedCitiesJson.sort(sortWithPopulation)
console.log("refUnsortedCities.json sorted by population")
console.log(refUnsortedCitiesJson) // only sorted during runtime
/** bind fs-module for other methode to manipulate json */
const fs = require("fs")
const pathToCitiesJson = "cities.json"
/** basic fs usage */
const readJson = (myPath) => {
return new Promise(resolve => {
try {
fs.readFile(myPath, (err, data) => {
resolve(data)
})
} catch (err) {
console.log("Achtung!: " + err)
}
})
}
const stringyfyJsonData = async function() {
const data = await readJson(pathToCitiesJson)
return JSON.parse(data)
}
stringyfyJsonData().then( (package) => {
console.log(`these cities are stored in ${stringyfyJsonData.name}: `)
package.forEach( (object) => {
console.log(object.name)
})
})
const deleteCityAtIndex = async index => {
const cities = await getJsonData()
cities.splice(index, 1)
fs.writeFile(citiesJson, JSON.stringify(cities), () => {
return
})
}
/** json manipulation without fs-module */
const findCityByName = (name) => {
refCitiesJson.forEach((value, index) => {
if (value.name == name) {
return index
}
})
return undefined
}
const deleteCityAt = (index) => {
refCitiesJson.splice(index, 1)
}
deleteCityAt(2)
console.log("\nrefCities.json (2nd Object in array was deleted):")
console.log(refCitiesJson)
// missing pieces will be added
Für das Verständnis von Node.js wurde primär die Videoreihen von thenativeweb verwendet und parallel mitgekodiert. Um im Projekt angemessen voranzukommen, sollen mindestens die ersten 10 Videos aus der Reihe angeschaut werden. Aus zeitlichen und technischen Schwierigkeiten konnten davon zum aktuellen Stand (10.12.2020) nur 5 von 10 Videos vollständig bearbeitet werden.
(aus Folge 4):
'use strict' //zur unüblichen Auslösung eines Abbruchs bei Fehlern
const http = require('http')
const path = require('path')
const express = require('express') //Referenzierung Funktion aus express
const clientDirectory = path.join(__dirname, 'client') //Referenzierung index.html
const app = express() //express() gibt RequestListener zurück, auf was die Konstante referenziert
const logger = require('./logger')
app.use(logger({ //middleware: wird vor dem eigentlichen get verarbeitet
level: 'DebugLog'
}))
app.use('/', express.static(clientDirectory))
app.get('/', (req, res) => { //handler wird nicht angesprochen, da root bereits die index.html zeigt
const person = {
firstName: 'Paul',
lastName: 'Johne',
rootpage: 'My Homepage'
}
//res.send('Hallo du Webapp!')
res.send(person)
//res.status(500).send('internal server error')
})
app.get('/blog/:year/:month/:day?', (req, res) => { //day? ist optional
if (req.query.format === 'html') {
res.send(`<h1>${req.params.day}.${req.params.month}.${req.params.year}</h1>`)
return
}
res.send({
year: req.params.year, // + 0 zum Konvertieren
month: req.params.month,
day: req.params.day || '01'
})
})
const server = http.createServer(app) //app ist drop-in-replacement
server.listen(3000, () => {
console.log('Server is listening to port 3000.')
})
(aus Folge 5):
'use strict'
const http = require('http')
const path = require('path')
const bodyParser = require('body-parser') //notwendig, um in express POST requests entgegenzunehmen
const express = require('express')
const app = express()
app.use(cors()) //alle frontends können es nutzen
app.use(bodyParser.json({
limit: '100kb' //default Wert
}))
app.use('/', express.static(path.join(__dirname, 'client')))
app.get('/hello', (req, res) => {
res.cookie('user', 'paul.johne', {
maxAge: 24 * 60 * 60 * 1000 //24h erhalten
}).send('Hallo Welt!')
})
app.get('/articles', (req, res) => {
res.send([
{ id: 1, title: 'foo' }
])
})
app.post('/articles', (req, res) => {
res.send(req.body)
})
const server = http.createServer(app);
server.listen(3000, () => {
console.log('Server listening on port 3000')
})
