Nodejsベース駐車


Express


Webサーバを作成するには、URL管理、ファイル管理、ログインなど、Webサーバを作成するために必要な機能が必要です.これらの機能は、フレームワークと呼ばれています.
ここでexpressは、nodeがWebサーバを作成するために使用する最も一般的なフレームワークです.
package.json 생성코드
npm init -y
express 설치 코드
npm install express

Express - Routing


ルーティングを使用すると、urlごとに異なる成果物を表示できます.

Express - Router


同じページ間で同じルートを使用してグループ化
routes/user.jsファイル
var express = require('express');
var router = express.Router();

router.get('/login', function(req, res, next) {
  res.send('로그인 페이지')
});

router.get('/register', function(req, res, next) {
  res.send('회원가입 페이지')
});
  
module.exports = router;
index.jsファイルの変更
const userRouter = require('./routes/user');

app.use('/user',userRouter);

Express - Middleware


以前学習したWebフレームワークの特徴.繰り返しが必要な動作を簡単に処理しておくことができます
ミドルウェア使用例
const express = require('express');
const app = express();

app.use((req, res, next) => {
  console.log(req);
  next();
});

app.get('/', (req, res, next) => {
  res.send('Welcome Home');
});

app.listen(3000);
真ん中のappガードを使う
ローコードを使用すると、どんなリクエストがあってもreqを記録し、実際のルーティングに転送します.
미들웨어 추가 코드
app.use(express.urlencoded({extended: false}))
app.use(express.json())

静的ミドルウェアを内蔵


index.jsファイルにコードを1行追加
app.use(express.static('public'));
共通フォルダを作成して画像を入れることができます.
次に/ファイル名のパスを入力し、Webブラウザで画像を表示できます.

テンプレートエンジン


テンプレートエンジンを使用すると、ユーザーはフォーマットが一致するHTMLファイルに必要なデータを動的に挿入し、必要なフォーマットのホームページを整理できます.

テンプレートエンジンの利点

  • は多くのコードを減らすことができます->
  • デフォルトのHTMLよりも簡単な構文を使用
  • 高可用性->同じデザインページの表示データのみを変更します.
  • メンテナンスが容易
  • ->複数のページをレンダリングするテンプレートを作成します.
  • テンプレートエンジンの1つであるEJS

    설치코드
    npm install ejs
    
    package.json 파일을 열었을 때 dependencies 부분에 ejs 가 들어가 있으면 정상적으로 설치가 된 것
    使用例
    app.set('views', __dirname + '/views');
    app.set('view engine', 'ejs');
    
    app.get('/test', (req, res) => {
      let name = req.query.name;
      res.render('test', {name});
    })
    viewフォルダを作成してテストします.ejsファイルを追加してテストします.ejsファイルの内容がWebページに表示されます
    res.renderはtestです.ejsファイルを描画し、そのejsファイルにname値をオブジェクトとして渡すことを示します.

    EJS構文

    app.get('/test', (req, res) => {
      let name = req.query.name;
      res.render('test', {name});
    })
    test.ejsファイルを描画し、ejsファイルのnameという値をオブジェクトに渡します.
    ファイルを描画した場合
    <!DOCTYPE html>
    <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
      </head>
      <body>
          Hi. My name is <%= name %><br>
      </body>
    </html>
    ejs構文を使用して新しく生成されたページにアクセス
    localhost:3000/testファイル?オブジェクトに渡される値=表示する値
    localhost:3000/test?name=willy
    -->> Hi. My name is willy
    このようにejs構文を使用します.
    3週目からデータベースを作成し、データベースデータを取得するためのapiを作成します.

    REST欄


    これは,Web上に存在するすべてのリソース(画像,ビデオ,DBリソース)に固有のURIを付与することによって用いられることで,リソースを定義し,リソースにアドレスを指定する方法論を意味する.
    これらのWeb上に存在するリソースにアクセスする方法などを定義してRESTと呼ぶ.

    REST API:RESTルールに従う3種類のAPI構成


  • リソース-URL
    私たちが作成するソフトウェアが管理するすべては、リソースで表すことができます.ショッピングモールの場合は、商品情報やカート内の商品を管理します.

  • 動作-HSTPメソッド
    作成さくせい:作成(POST)さくせい(POST)
    Read:クエリー(GET)
    更新:変更(PUT)
    Delete:削除(DELETE)

  • 表現
    JSON、XMLなどの形式で資源を表す
  • mongoose


    mongodbに接続し、データモデリングのツールを提供します.ノードで直接使用できます.
    造形は商品の構造、商品のイメージ、商品名、価格、カテゴリなどです!
    Schemaはフォルダにファイルを追加する構成です.
    mongoose 설치코드
    npm install mongoose
    
    例(アーキテクチャフォルダ/index.jsファイルのコードの作成)を使用してmongose構造を作成する
    const mongoose = require("mongoose");
    
    const connect = () => {
      mongoose
        .connect("mongodb://localhost:27017/voyage", {
          useNewUrlParser: true,
          useUnifiedTopology: true,
          useCreateIndex: true,
          ignoreUndefined: true
        })
        .catch(err => console.log(err));
    };
    
    mongoose.connection.on("error", err => {
      console.error("몽고디비 연결 에러", err);
    });
    
    module.exports = connect;
    次に、データをモデリングします.
    mongoseでSchemaオブジェクトを使用します.
    使用例(アーキテクチャフォルダ/goods.jsファイルのコードを作成)
    const mongoose = require("mongoose");
    
    const { Schema } = mongoose;
    const goodsSchema = new Schema({
      goodsId: {
        type: Number,
        required: true,
        unique: true
      },
      name: {
        type: String,
        required: true,
        unique: true
      },
      thumbnailUrl: {
        type: String
      },
      category: {
        type: String
      },
      price: {
        type: Number
      }
    });
    
    module.exports = mongoose.model("Goods", goodsSchema);
    使用例(最上位レベルのindex.jsファイルを変更)
    const connect = require("./schemas");
    connect();
    上にはSchemaオブジェクトのみが追加され、goodsID、name、thumbnail Url、category、priceデータをモデリングし、商品を含む新しい変数Goodsを宣言し、create関数を呼び出してmongodyにデータを追加します.
    これでrobo 3 Tに接続して入力したデータを確認できます.
    しかしこれはまだmongodyのデータがインポートされておらず、一時的に表示されているだけです!!
    では、実際にMongoDBデータを取得する方法で変更しましょう.

    mongodbに格納されているデータをインポートするためのapiを追加


    使用例(index.jsファイルに追加)
    const goodsRouter = require("./routers/goods");
    app.use("/api", [goodsRouter]);
    (ルータ/goods.jsファイルに追加)
    const express = require("express");
    const Goods = require("../schemas/Goods");
    
    const router = express.Router();
    
    router.get("/goods", async (req, res, next) => {
      try {
        const { category } = req.query;
        const goods = await Goods.find({ category }).sort("-goodsId");
        res.json({ goods: goods });
      } catch (err) {
        console.error(err);
        next(err);
      }
    });
    
    router.get("/goods/:goodsId", async (req, res) => {
      const { goodsId } = req.params;
      goods = await Goods.findOne({ goodsId: goodsId });
      res.json({ detail: goods });
    });
    
    module.exports = router;
    呼び出し/api/goodsリストが正しいかどうかをチェック!

    現在apiサーバを介してmongodbの商品情報の導入に成功している.
    ここでは、/インデックスを表示します.ejsファイルを変更すると、ショッピングモールにカタログを表示できます.

    Insomniaへの商品追加


    POSTメソッドの特徴はGETメソッドとは異なり,bodyと呼ばれる付加情報を含み,サーバに伝達できる.
    使用例(ルータ/goods.js)
    router.post('/goods', async (req, res) => {
      const { goodsId, name, thumbnailUrl, category, price } = req.body;
    
      isExist = await Goods.find({ goodsId });
      if (isExist.length == 0) {
        await Goods.create({ goodsId, name, thumbnailUrl, category, price });
      }
      res.send({ result: "success" });
    });

    PATCHとPUT方法の違い


    PUTは、リソース内のすべてのフィールドの情報を変更するために使用され、PATCHは、リソース内のいくつかのカラムのみを変更するために使用される