Moduler

Webbserverprogrammering 1

Varför moduler?

När vi skapar mer och mer kod i en applikation bör vi dela in den i mindre logiska delar för att skapa en bättre överblick.

En modul kan innehålla och exponera en en eller flera funktioner, objekt, variabler, eller en klass.

En modul kan exporteras från en js-fil och importeras till en annan js-fil.

När man vill förändra sin kod så att den följer en bättre struktur och mindre upprepning kallas det för att refaktorisera (eng. refactoring).

Först...kommer ni ihåg att man kan skriva en Javascriptfunktion även såhär? D.v.s som ett funktionsuttryck.

Vi använder oss av denna syntax för att skriva en funktion då det förenklar våra exporter av funktioner

const sayHi = function() {

 console.log("hej hej.."):
 
}

Exportera från hello.js

const sayHi = function() {

console.log("Hej hej...");

}

module.exports = sayHi;

// Importera
const sayHi = require("hello.js");

/* Funktionen som importerats 
 från annan fil kan användas här*/
sayHi();

Importera till annan fil

Exportera funktionen

Importera sayHi och sayGoodbye från hello.js

ALTERNATIV 1

Exportera från hello.js

exports.sayHi = function() {

console.log("Hej hej...");

}

exports.sayGoodBye = function() {

console.log("Hejdå...");

}

// Importera
const {sayHi, sayGoodbye] = 
require("hello.js");

/* Funktionen som importerats 
 från annan fil kan användas här*/
sayHi();

Smidigare när vi vill exportera flera funktioner

Importera till annan fil

Exportera funktionen

Exportera funktionen

Importera sayHi och sayGoodbye från hello.js

ALTERNATIV 2

Dags att refaktorisera vår blogapplikation

  • Lägga våra routes i egen fil
  • Plocka ut våra funktioner som ska ansvara för vår databashantering, Create Read Update Delete (CRUD)

1. Refaktorisera våra routes

1. Skapa mappen routes och filen postRoutes.js

2. Lägger över de 7 routes för post till postRoutes.js

3. Skapa en s.k routehanterare som kan

hantera alla routes i postRoutes.js, importera

även express.

const express = require("express");
// Routehanterare
const router = express.Router();

Lägg högst upp

postRoutes.js

4. Byt ut app till router

5. Ta bort sökvägen post

5. Exportera router längs ner i filen

// Visar alla inlägg
router.get("/", function (request, response) {
    response.send("Här ska alla inlägg visas");
});

// Visar ett formulär för att skapa nytt ett inlägg
router.get("/new", function (request, response) {
    response.send("På den här URI:en ska ett formulär visas");
});

// Skapa ett inlägg
app.post("/", function (request, response) {
    response.send("Här kommer du kunna skapa ett inlägg");
});
module.exports = router;

+ de fyra till

exportera sist i filen

Byt app till router

postRoutes.js

Ta bort post

2. Refaktorisera våra routes

6. Importera postRoutes i app.js

7. Samt lägga använda våra postRoutes i applikation med app.use()

// Hämtar postRoutes
const postRoutes = require("./routes/postRoutes.js");

// Middleware
app.use("/post", postRoutes);

app.js

Här använder vi sökvägen istället

3. Refaktorisera våra routes

1. Refaktorisera funktioner för databashantering (CRUD)

1. Skapa mappen controllers och filen postController.js

2. Gå till postRoutes.js och plocka ut funktionerna för Create, Read, Update, Delete

// Skapa ett inlägg (CREATE)
app.post("/", function (request, response) {

    response.send("Skapa ett inlägg");

});

Alltså denna funktion

// Skapa ett inlägg (CREATE)
exports.createPost = function(request, response) {

    response.send("Skapa ett inlägg");

};
// Skapa ett inlägg (CREATE)
const createPost = require("./../controllers/postController.js");

app.post("/", createPost);

postController.js

postRoutes.js

+ fyra till :-)

+ fyra till :-)

Här kommer vi lägga in att skapa inlägg till mongodDB databas

2. Refaktorisera funktioner för databashantering (CRUD)

Moduler i Node.js - Printversion

By Sandra Larsson

Moduler i Node.js - Printversion

Att dela in sin kod mindre logiska delar. En modul kan exporteras från en fil och importeras till en annan.

  • 133