ノード.REST APIを作る方法パート1


ハローコミュニティ.
このチュートリアルでは、NODEJSを使用してREST APIを作る方法を教えます.
これらすべてのトピックをカバーします.
  • REST API:何が,何がその利点か
  • 我々のプロジェクト
  • の考え
  • セットアップ環境
  • は、我々のプロジェクト
  • のために最高の構造を選びます
  • 私たちのREST APIをビルド
  • では始めましょう

    REST API:何が,何がその利点か


    REST APIは2000年以降完全にソフトウェア工学を変えました.Webプロジェクトとサービスを開発するためのこの新しいアプローチは、RYフィールディング(HTTP仕様の父)とネットワークアーキテクチャで行うすべての主要な国際的な権威の1つである、「建築様式とネットワークベースのソフトウェアアーキテクチャの設計」と題された論文で定義されました.
    今日は、このソフトウェアに基づいてプロのサービスの作成のための残りのAPIを持っていないプロジェクトやアプリケーションがありません.Twitter、YouTube、Facebookの識別システム…企業の何百もの残りの残りの部分にビジネスのおかげで生成API.それらなしで、水平方向の成長は実質的に不可能です.これは、RESTがインターネットサービスのAPIの作成において最も論理的で、効率的で広く普及しているからです.

    プロジェクトのアイデア


    このチュートリアルでは、ムービーAPIを構築します.
  • 登録ユーザー
  • ログインユーザー
  • は、新しい映画を作成します
  • すべての映画を得る(パート2)
  • IDによって映画を得てください
  • 映画を加えます(パート2)
  • 最新映画(パート2)
  • 削除映画(パート2)
  • 環境設定


    APIをビルドするための技術
  • エクスプレス:ノードJSフレームワーク
  • MongoDB : NoSQLデータベースとマングースパッケージを使用します
    あなたのCMDとタイプを開けてください
    mkdir movies-api //create an empty folder
    cd movies-api //navigate to our project 
    npm init --yes //create package.json file 
    npm i --save express
    npm i --save mongoose 
    npm i --save-dev nodemon 
    

    プロジェクトの最良の構造を選択


    ムービーAPI :
    ├───コントローラ
    ├───ミドルウェア
    ├───モデル
    └───路線
    だからこれらのフォルダを作成し、実際の仕事を始めましょう

    実際の仕事


    まずインデックスを作成する必要があります.jsファイル
    端末とタイプに移動
    touch index.js
    
    サーバの作成
    //index.js
    const express = require('express');
    
    const app = express();
    
    const PORT = process.env.PORT || 5000;
    
    app.listen(PORT, () => {
        console.log('server is running')
    });
    
    端末でサーバ型を実行するには
    nodemon
    
    あなたはそのようなことを見なければならない

    今私たちのプロジェクトをデータベースに接続するための時間であり、私はそれをチェックし、無料のアカウントを作ることができます
    //index.js
    const express = require('express');
    const mongoose = require('mongoose');
    
    const app = express();
    
    const PORT = process.env.PORT || 5000;
    
    
    mongoose
      .connect(
        "your mongoDB atlas database url connection",
        { useUnifiedTopology: true, 
          useNewUrlParser: true, 
          useCreateIndex: true })
      .then(() => {
        app.listen(PORT, () =>console.log('server is running'))
      })
      .catch(err => {
        console.log(err);
      });
    
    このアプローチでは、サーバー接続はデータベース接続にエラーがない場合にのみ実行されます.
    次の手順は、モデルフォルダのユーザーモデルでユーザーファイルを作成します.js
    //user-model.js
    const mongoose = require('mongoose');
    
    const Schema = mongoose.Schema;
    
    const userSchema = new Schema({
      name: { type: String, required: true },
      email: { type: String, required: true, unique: true },
      password: { type: String, required: true, minlength: 6 }
    });
    
    module.exports = mongoose.model('User', userSchema);
    
    では、ユーザのコントローラーをコントローラのフォルダに作りましょう.
    しかし、最初に、3つのパッケージmongoDB atlasbcryptjsおよびjsonwebtokenを必要とする
  • bcryptjs :データベースに格納する前にユーザパスワードを暗号化するのに役立ちます
    JSwWebToken : JWT技術的にはいくつかのJSONデータの所有者を確認するメカニズムです.これは暗号化された文字列で、データの無制限な量(クッキーとは異なり)を含むことができます.
  • Express Validator :データベースに格納する前に、このパッケージを使用してデータをテストする必要があります.
  • npm i --save bcryptjs
    npm i --save jsonwebtoken
    npm i --save express-validator
    
    注意: 1つのコマンドで3つのパッケージをインストールできます
    npm i --save becryptjs jsonwebtoken express-validator
    
    荷物を輸入しましょう
    //user-controller
    const { validationResult } = require('express-validator');
    const User = require('../models/user');
    const bcrypt = require('bcryptjs');
    const jwt = require('jsonwebtoken');
    
    レジスタ関数
    //user-controller.js
    const register = async (req,res) => {
     const errors = validationResult(req);
    
      if (!errors.isEmpty()) 
       return res.status(400).json("check your data");
    
      const { name, email, password } = req.body;
       let  existingUser = await User.findOne({ email: email });
       if (existingUser)
         return res.status(400).json("user exist");
    
      let hashedPassword = await bcrypt.hash(password, 12);
    
      const createdUser = new User({
        name,
        email,
        password: hashedPassword
    });
    
      try { await createdUser.save() } catch (err) {}
    
      let token;
      token = jwt.sign(
        { userId: createdUser.id, email: createdUser.email },
        'supersecretkey',
        { expiresIn: '1h' });
        res.status(201).json({ token: token, userId: createdUser.id });
    }
    
    
    
    ログイン機能
    //user-controller.js
    const login = async (req, res) => {
      const { email, password } = req.body;
      let existingUser;
    
      try {
        existingUser = await User.findOne({ email: email });
      } catch (err) { }
    
      if (!existingUser) 
        return res.status(200).json('Invalid credentials, could not log you in');
    
     let isValidPassword = await bcrypt.compare(password, existingUser.password);
    
      if (!isValidPassword) 
        return res.status(400).json('Invalid credentials, could not log you in.');
    
      let token;
      token = jwt.sign(
        { userId: existingUser.id, email: existingUser.email },
        'supersecretkey',
        { expiresIn: '1h' }
      );
      res.status(200).json({ token: token, userId: existingUser.id });
    }
    
    これら二つの関数をエクスポートする必要があります
    //user-controller.js
    exports.register= register;
    exports.login = login;
    
    ルートファイルのフォルダを作成するには、ユーザーのルートを作成することができます.
    最初に、我々が必要とするものを輸入しましょう
    //user-rotes.js
    const { check } = require('express-validator');
    const usersController = require('../controllers/user-controller');
    const express = require('express');
    const router = express.Router();
    
    路線
    router.post('/register',
      [ check('name').not().isEmpty(),
        check('email').normalizeEmail().isEmail(),
        check('password').isLength({ min: 6 })],
    usersController.register)
    
    ログイン経路
    router.post('/login',
      [ check('email').normalizeEmail().isEmail(),
        check('password').isLength({ min: 6 })],
    usersController.login)
    
    ルートをエクスポート
    module.exports = router;
    
    我々がする必要がある最後のことは、インデックスにユーザールートをインポートすることです.JSとexpress-validatorでAPIをテストします
    //index.js
    const express = require('express');
    const mongoose = require('mongoose');
    const usersRoutes = require('./routes/user-routes');
    const bodyParser = require('body-parser');
    
    const app = express();
    app.use(bodyParser.json());
    
    app.use('/api/users', usersRoutes);
    
    const PORT = process.env.PORT || 5000;
    mongoose
      .connect(
        "your mongoDB atlas database url connection",
        { useUnifiedTopology: true, 
          useNewUrlParser: true, 
          useCreateIndex: true })
      .then(() => {
        app.listen(PORT, () =>console.log('server is running'))
      })
      .catch(err => {
        console.log(err);
      });
    
    今すぐオープンポストマンとスタートテストのログインと登録ルート

    郵便配達人 レジスタ


    「POSTメソッド」を選択し、「localhost : 5000/api/user/register」と入力してから「body」を選択し、「JSON」を選択してデータを入力して

    ログイン



    ユーザーのコレクションで新しいユーザーを表示する必要があるデータベースを開きます

    我々は、我々のパート1が行われると言うことができます我々は、次の部分で続きます.
    ありがとう.