노드js: RESTAPI 섹션 1 작성 방법

지역사회 안녕하십니까,
이 강좌에서 nodejs를 사용하여 RESTAPI를 만드는 방법을 가르쳐 드리겠습니다.
우리는 이 모든 주제를 포함할 것이다.
  • REST API: 무엇입니까, 장점은 무엇입니까?
  • 우리 프로젝트의 생각
  • 설정 환경
  • 프로젝트를 위한 최적의 구조 선택
  • REST API 구축
  • 시작합시다.

    RESTAPI: 그게 뭐예요? 장점이 뭐예요?


    REST API는 2000년 이후 소프트웨어 공학을 완전히 바꾸었다.이러한 웹 프로젝트와 서비스를 개발하는 새로운 방법은 HTTP 규범의 아버지인 Roy Fielding이'체계 구조 양식과 네트워크를 바탕으로 하는 소프트웨어 체계 구조의 디자인'이라는 제목의 논문에서 정의한 것이다. 그는 네트워크 체계 구조와 관련된 모든 분야에서 국제 권위를 앞서는 사람이다.
    오늘날, 이 소프트웨어를 기반으로 하는 전문 서비스를 만들기 위한 프로젝트나 응용 프로그램이 없습니다.트위터, 유튜브, 페이스북 인식 시스템...REST와 RESTAPI 때문에 수백 개의 회사가 업무를 일으켰다.그것들이 없으면 어떤 수준의 성장도 거의 불가능하다.이는 REST가 인터넷 서비스를 위한 API를 만드는 가장 합리적이고 효율적이며 광범위한 표준이기 때문이다.

    우리 프로젝트의 생각


    이 강좌에서는 영화 API를 구축합니다.
  • 사용자 등록
  • 로그인 사용자
  • 새 영화 만들기(2부)
  • 모든 영화 가져오기(2부)
  • id로 영화 얻기(2부분)
  • 영화 추가(2부)
  • 영화 업데이트(2부)
  • 영화 삭제(2부)
  • 환경 설정


    API 구축을 위한 기술:
  • Express: 노드 js 프레임워크
  • mongoDB: NoSQL 데이터베이스, 우리는 mongose 패키지
  • 를 사용할 것이다
    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
    
    너는 반드시 이런 물건을 보아야 한다

    이제 우리의 프로젝트를 데이터베이스와 연결할 때가 되었습니다. 이 때문에 저는 mongoDB atlas 을 사용할 것입니다. 당신은 그것을 검사하고 무료 계정을 만들 수 있습니다.
    //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);
      });
    
    이런 방법을 사용하면 데이터베이스 연결에 오류가 없는 상황에서만 우리 서버가 실행할 수 있다.
    다음 단계는 모델 폴더user 모델에서 파일을 만들 수 있도록 사용자 모델을 구축하는 것입니다.회사 명
    //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);
    
    현재, 컨트롤러 폴더에 사용자 컨트롤러를 만듭니다. "user controller.js"라는 파일은 두 개의 함수register와login을 포함합니다.
    하지만 우선 세 개의 가방bcryptjs, jsonwebtokenexpress-validator이 필요합니다.
  • bcryptjs: 사용자 비밀번호를 데이터베이스
  • 에 저장하기 전에 암호화하는 데 도움을 줄 것입니다
  • jsonwebtoken: JWT는 기술적으로 일부 JSON 데이터 소유자를 검증하는 메커니즘이다.이것은 인코딩 문자열입니다. URL이 안전하고 무한량의 데이터 (쿠키와 다름) 를 포함할 수 있으며 암호화 서명을 할 수 있습니다.
  • expressvalidator: 이 패키지로 데이터를 테스트한 다음에 데이터베이스에 저장해야 합니다.
  • npm i --save bcryptjs
    npm i --save jsonwebtoken
    npm i --save express-validator
    
    참고: 하나의 명령으로 세 개의 패키지를 설치할 수 있습니다.
    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 routes.js'를 만들 수 있습니다. 이 파일은 두 개의 루트를 포함합니다. 하나는 사용자를 등록하는 데 사용되고, 다른 하나는 사용자를 로그인하는 데 사용됩니다.
    우선, 우리가 필요로 하는 것을 가져오자
    //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 및 사용postman 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);
      });
    
    이제postman을 열고 로그인 및 등록 루트 테스트를 시작합니다

    등록


    post 방법을 선택하고 "localhost: 5000/api/users/register"를 입력하고 body로 이동해서 "row"를 선택한 다음 "json"을 선택하고 마지막으로 데이터를 입력하고 보내기

    로그인



    데이터베이스를 열려면users 집합에서 새 사용자를 보셔야 합니다

    우리는 첫 번째 부분이 이미 완성되었다고 말할 수 있다. 우리는 다음 부분에서 계속할 것이다.
    정말 감사합니다.

    좋은 웹페이지 즐겨찾기