NodeJS(4기) 37일차

형집·2023년 1월 4일

NodeJS(4기)

목록 보기
45/56

위기들

에러

Uncaught ReferenceError: $ is not defined

제이쿼리를 상단에 정의 안해서
cdn jquery
cdn을 사용하면 빠르게 제이쿼리를 로드할 수 있습

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

상단에 입력


innerjoin 하는법

const {request_status} = require("../models");
const {service_request} = require('../models');
class Getallrepository {
  
  // ORM인 Sequelize에서 Require_status 모델의 findAll 메소드를 사용해 데이터를 요청합니다.
  findAllRequire = async () => {
    const require_status = await request_status.findAll({
      raw:true,//풀어버림 데이터삭제<<<<<<<<<<<<<<<<
      include:[
        {
          model:service_request,
          required: true,
          attributes:[]//<<<<<<<<<<<<<<<<<<
        }
      ],
      attributes:['service_request.name','service_request.phone','service_request.address','service_request.request_details','current_status']//<<<<<<<<<<<
    });
    return require_status;
  };

1

요걸 누르고 검사하고 싶은 곳을 누르면

내가 작성한 html이 어떻게 뜨는지 쭉 나온다.

<div class="col-12">
	<select name="order" class="custom-select" id="inputGroupSelect">
		<option value="-1" selected>상태변경</option>
		<option value="1">대기 중</option>
		<option value="2">수거 중</option>
		<option value="3">수거 완료</option>
		<option value="4">배송 중</option>
		<option value="5">배송 완료</option>
	</select>
<div class="input-group-append">
<button onclick="put_status(${i})" class="btn btn-outline-secondary" type="button">Button</button>
</div>

셀렉트박스에서 선택한 value를 보내고 싶었다. 버튼을 누르면 put_status함수로 i값이 날라가는데 같이 value를 보내고 싶었다. 재관님이 봐주시고 id도 for문으로 값을 줘야 한다고 알려주셨다.

<select name="order" class="custom-select" id="inputGroupSelect${i}">

맞다!!! 셀렉트 박스도 매 row마다 다 다른 것이었음



1. url을 어떻게 쓸까 고민을 많이 했다.
썬더클라우드로 백앤드를 시험 해봤을 때는 /api/status/2 돌린게 성공해서
/api/status/:request_id 로 해봤지만 어김없이 실패
지훈님이 백틱을 쓰면 된다고 하셨다.
지금까지 백틱을 get메소드에서 html 파일들 감쌀 때만 쓰는줄 알았다.
그림같이 /api/status/${i+1} 으로 잘 받아왔다.

  1. 처음에는
$.ajax({
        type: "PUT",
        url: `/api/status/${i + 1}`, 
        data: { 'current_status': target.value },        
        success: function () {
          alert("수정되었습니다")
          window.location.reload()
        }
      })

이런 식으로 데이터를 보냈다.
그랬더니 controller에서 body값을 못 받는 것이다!!
아래 블로그에 답이 있다
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=moonv11&logNo=220605582547

contentType: 'application/json; charset=utf-8',
data: JSON.stringify(JSONObject),

서버에서도 @RequestParam 이 아닌 @RequestBody 로 데이터를 받아줘야 한다.

$.ajax({
        type: "PUT",
        url: `/api/status/${i + 1}`, 
        data: JSON.stringify({ 'current_status': target.value }),
        contentType: 'application/json; charset=utf-8',

        success: function () {
          data: JSON.stringify(jsondata)
          alert("수정되었습니다")
          window.location.reload()
        }
      })

npm run dev 를 터미널에 입력하면 서버를 껐다 켰다 안해도 편하게 사용 가능


처음 의도는 버튼을 누르면 get방식으로 필요한 데이터를 받아와서 입력받은 데이터와 비교해 같으면 put방식으로 데이터 수정
이 지금까지 내가 쓰던 방식이었는데
토큰을 사용하며 필요가 없어짐
한 버튼에 한 기능 명심하자 남이 보기 편하게 코딩하자

    function getuserid() {
      let result3 = [];
      $.ajax({
        type: "GET",
        url: "/api/status",
        data: {},
        success: function (response) {
          console.log(response)
          response.data.forEach((item) => {
            result3.push([item.current_status, item.provider_id, item.request_id]);
          })
      )}}
      return result3
    }

routes 에 미드웨어 넣었따.

const AuthMiddleware = require('../controllers/auth.controller.js');
const authMiddleware = new AuthMiddleware();

router.put('/:request_id',authMiddleware.auth_middleware,getallController.updateRequireStatus);

컨트롤러에서 토큰에 저장된 user_id를 뽑아왔다. 뽑아서 provider_id에 넣음

const jwt = require('jsonwebtoken');
const provider_id = res.locals.user.user_id;

어렵다 하나하나 어렵다
고민하다 풀리면 너무 좋다
팀원과 같이 얘기를 나누면서 풀면 더 좋다

profile
개발자

0개의 댓글