Text
Databas
COLLECTION
innehåller ett flertal "document"
NoSQL
DOCUMENT
innehåller "key-value pairs"
DATABAS innehåller en eller flera "collections" såsom users, posts, etc.
SQL
"Tabell"
"Rader"
Text
Olika alternativ:
Text
Behöver vi hantera e variabler som är beroende på vilken utvecklingsmiljö programmet körs på, eller inställningar på servern.
Dessa variabler som exempelvis port, databasuppkoppling, databasnamn, användarnam, lösenord, m. fl., kallas för miljövariabler (eng. environment variables) och behöver hanteras separat och vara åtskilda från applikationen (exempelvis i egen fil)
D.v.s en vacker dag vill vi drifta vår applikation från att köra lokalt till live på internet :-)
Smidigt med npm-modulen dotenv där man enkelt kan läsa in miljövariablerna från en egen fil.
npm install dotenv
const dotenv = require("dotenv");
// Ange sökvägen till vår .env-fil
dotenv.config({path: "./config.env"});
/* Hämta en miljövariabel
med process.env.VARIABELNAMN */
const port = process.env.PORT;
const DB = process.env.DATABASE.replace(
"<PASSWORD>",
process.env.DATABASE_PASSWORD
);
Skapa filen config.env i roten
NODE_ENV=development
PORT=3000
DATABASE=XXX
DATABASE_PASSWORD=XXX
app.js
Filen config.env i roten
NODE_ENV=development
PORT=3000
DATABASE=mongodb+srv://sanla:<PASSWORD>@cluster0-pzfk4.mongodb.net/blog?retryWrites=true&w=majority
DATABASE_PASSWORD=XXX
+ lösenordet när du skapade en användare till ditt cluster
Här kan du byta namnet på databasen från test till exempelvis blog
Mongoose är ett bibliotek som sköter databashantering för MongoDB på Node.js
Det är Mongoose funktioner vi kommer använda för databasuppkoppling, skapa modell för våra inlägg, samt CRUD-funktionerna för databashantering
npm install mongoose
const express = require("express");
const dotenv = require("dotenv");
const mongoose = require("mongoose");
// Ange sökvägen till vår .env-fil
dotenv.config({path: "./config.env"});
/* Hämta en miljövariabel
med process.env.VARIABELNAMN */
const port = process.env.PORT || 3000;
const DB = process.env.DATABASE.replace(
"<PASSWORD>",
process.env.DATABASE_PASSWORD
);
// Uppkoppling till databas
mongoose
.connect(DB, {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false
})
.then(function(con) {
console.log(con.connecion);
console.log("DB connection successful");
});
// Vår applikation startar en HTTP server och lyssnar på den port vi angivet
app.listen(port, function () {
console.log(`Vår app lyssnar på port ${port}...`);
});
app.js
const postSchema = new mongoose.Schema({
title: String,
image: String,
body: String
});
const Post = mongoose.model("Post", postSchema);
Det som är bra med en NoSQL-databas som MongoDB är att du kan ändra egenskaperna i modellen i applikationen. Ex. Kanske vill vi lägga till ett datum då inlägget skapades, går även bra senare!
I det s.k schemat anger vi egenskaperna till ett inlägg. och sedan lägger in det som en modell. Vi kommer sedan använda Post för att läsa/skapa till databas.
const mongoose = require("mongoose");
const postSchema = new mongoose.Schema({
title: String,
image: String,
body: String
});
const Post = mongoose.model("Post", postSchema);
module.exports = Post;
const Post = require("./../models/postModel");
postModel.js
postController.js
Databasoperation | Hantering av inlägg | Mongoosefunktion |
---|---|---|
Create | Skapa inlägg | Model.create(request.body) |
Read | Hämta alla inlägg | Model.find() |
Read | Hämta specifikt inlägg | Model.findById(request.params.id) |
Update | Uppdatera inlägg | Model.findByIdAndUpdate( request.params.id, request.body) |
Delete | Ta bort inlägg | Model.findByIdAndDelete(request.params.id) |
Edit | Visa formulär för att uppdatera inlägg | Model.findById(request.params.id) |
// Create - Skapa inlägg i databasen
exports.createPost = function (request, response) {
/* Inlägget som kommer skickas från ett formulär
finns i request.body och sparas som en
Post-modell i vår databas */
const newPost = Post.create(request.body);
// Logga för att se inlägget som sparades
console.log(newPost);
};
När man skickar data till en server (POST) så läggs det i request.body.
När datat skickas till server måste den tas om hand på rätt sätt.
Därför måste denna finnas med i vår app.js:
app.use(express.json());
// Create - Skapa inlägg i databasen. Nu asykront!
exports.createPost = async function (request, response) {
const newPost = await Post.create(request.body);
console.log(newPost);
};
// Create - Skapa inlägg i databasen
exports.getPost = function (request, response) {
// Hämta specifikt inlägg utifrån id
const post = await Post.findById(request.params.id);
// Logga för att se inlägget som hämtades
console.log(post);
};
När man skickar en url-parameter som ett id hämtar man det i request.params.id.
Databasoperation | Hantering av inlägg | Mongoosefunktion |
---|---|---|
Create | Skapa inlägg | Model.create(request.body) |
Read KVAR! | Hämta alla inlägg | Model.find() |
Read | Hämta specifikt inlägg | Model.findById(request.params.id) |
Update KVAR! | Uppdatera inlägg | Model.findByIdAndUpdate( request.params.id, request.body) |
Delete KVAR! | Ta bort inlägg | Model.findByIdAndDelete(request.params.id) |
Edit KVAR! | Visa formulär för att uppdatera inlägg | Model.findById(request.params.id) |