LEKCJA 07 - EXPRESS (p) - MongoDB - CRUD - async - imports

LEKCJA 07 - EXPRESS (p) - MongoDB - CRUD - async - imports
ukryj menu
SPEC
aktualizacja: 2021-12-05 09:24:22

1. Opis zajęć

założenia tej wersji lekcji:
- wszystkie operacje na bazie danych oraz fetch po stronie klienta wykonywane są
z użyciem składni async/await
- użycie importów zamiast require


2. składnia imports zamiast require

utwórz w aplikacji plik package.json poleceniem

npm initkopiuj

dodaj w nim elemet  
"type": "module"
cały plik package.json powinien wyglądać jak poniżej



{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "main": "server.js"
   ...
   ...
   ...
}

3. zmiany na serwerze expressa

warto przeglądnąć

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

import express from "express"kopiuj

import path from 'path';
const __dirname = path.resolve(); // potrzebne do sendFile

const app = express()
const PORT = 3000;kopiuj


4. podłączenie klienta mongodb

instalujemy sterownik mongodb (u mnie wersja 4.1.3)
patrz zaktualizowany package.json

npm install mongodbkopiuj

importy

import { MongoClient } from "mongodb";
const mongoClient = new MongoClient("mongodb://localhost:27017");kopiuj


przydatne później referencje do bazy i kolekcji

var currentDB
var currentCollkopiuj


po LISTEN wstawiamy

async function main() {

    await mongoClient.connect();
    console.log('+---------------- mongo podłączone!!!');

    const db = mongoClient.db("db_name");
    currentDB = db

    const coll = db.collection("coll_name");
    currentColl = coll

}

main()kopiuj



od teraz można pracować na ww zmiennych

5. plik Operations.js

dla uprządkowania aplikacji przenosimy wszystkie operacje na bazie danych do pliku Oparations.js
i załączamy na serwerze

import Opers from "./modules/Operations.js"kopiuj

poniżej fragmenty zawartości pliku Operations.js do dalszej rozbudowy


export default {

    addUser: async function (collection, data) {
        let resp = await collection.insertOne(data);
        console.log(resp)
        return resp
    },

    getAll: async function (collection) {
        let resp = await collection.find({}).toArray();
        console.log(resp)
        return resp
    },
    ...
    ...
    ...

}kopiuj


6. przykładowy routing na serwerze

na kliencie działamy z fetcha, z użyciem składni async/await

app.post("/add", async function (req, res) {
    let resp = await Opers.addUser(currentColl, req.body)
    console.log("out", resp)
    res.send({ status: "add", resp: resp })
})
app.get("/all", async function (req, res) {
    let resp = await Opers.getAll(currentColl)
    console.log("out", resp)
    res.send({ status: "all", resp: resp })
})kopiuj



7. dokumentacja

https://www.npmjs.com/package/mongodb
https://docs.mongodb.com/drivers/node/current/fundamentals/crud/write-operations/insert/
https://docs.mongodb.com/drivers/node/current/fundamentals/promises/