programing

본문 데이터가 작동하지 않는 게시물 가져오기 매개 변수가 비어 있습니다.

muds 2023. 3. 12. 11:27
반응형

본문 데이터가 작동하지 않는 게시물 가져오기 매개 변수가 비어 있습니다.

가져오기 위해 ajax 호출을 다시 쓰려고 합니다.

에이잭스:

  $.post({
    context: this,
    url: "/api/v1/users",
    data: { 
      user: 
        {
          email: email,
          password: password
        } 
    }
  }).done((user) => {
  }).fail((error) => {
  })

가져오기:

  fetch('/api/v1/users', {  
  method: 'POST',
  headers: {
    "Content-Type": "application/json"
  },      
    body: { 
    "user" : 
      {
        "email" : email,
        "password" : password
      } 
  }
  })
  .then(res => {  
    if (res.status !== 200) { {
        console.log("error")
      })          
    } else {
      res.json().then(data => {
        console.log(data)
      })
    }
  })

서버에서 오류 빈 매개 변수 - 잘못된 요청이 수신되었습니다.

이 방법도 찾았습니다만, 다음의 코드에서 에러가 발생하고 있습니다.예기치 않은 토큰입니다.

  var payload = { 
    "user" : 
      {
        "email" : email,
        "password" : password
      } 
  };

  var data = new FormData();
  data.append( "json", JSON.stringify( payload ) );

  fetch('/api/v1/users', {  
  method: 'POST',
  headers: {
    "Content-Type": "application/json"
  },      
    body: data
  })

가져오기 위해 ajax 요청을 다시 작성하려면 어떻게 해야 합니까?

github에서 다음 토픽을 팔로우했습니다.https://github.com/matthew-andrews/isomorphic-fetch/issues/34

이 질문에 대한 해결책은 JSON.stringify 함수를 사용하여 Content-Type 헤더를 application/json으로 설정하는 것입니다.내 질문의 두 번째 시도가 왜 안 먹혔는지 잘 모르겠어.

fetch('/api/v1/users', {  
    method: 'post',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({ "user": {
      "email" : email,
      "password" : password
    }}),
})

MDN 공식 문서:

var myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');

fetch('/contact-form', {
    method: 'POST',
    headers: myHeaders,
    mode: 'cors',
    cache: 'default',
    body: JSON.stringify(fields)
}).then(() => {
    dispatch(contactFormSubmitSuccess());
});

TL;DR 미포함mode: 'cors'JSON 몸이 통하지 않습니다.

나는 이것과 잠시 씨름했다. cors의 문제였습니다.어떤 도메인에서 다른 도메인으로(즉, 에서) 요구를 실행하고 있다고 가정합니다.localhost:8080로.localhost:3000)가 필요합니다.mode: 'cors'취득 설정 및 수신 도메인(localhost:3000는, 송신측 도메인으로부터의 요구를 허가할 필요가 있습니다( ).localhost:8080).

위의 코드 설명은 다음과 같습니다.

로부터의 요구.localhost:8080로.localhost:3000

fetch('http://localhost:3000/users/sign_in', {
      method: 'POST',
      mode: 'cors', // this cannot be 'no-cors'
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "user": {
          "email": `${this.state.userEmail}`,
          "password": `${this.state.userPass}`
        }
      }),
    })

그리고 수신 도메인이localhost:3000CORS를 허가하다localhost:8080.

headers: {'Content-Type': 'application/json'}

이미 대답한

송신할 때, 이 방법으로 동작합니다.body~하듯이json실패했습니다.

        var formData = new FormData();
        formData.append('key1', 'value1');
        formData.append('key1', 'value2');

        fetch('url', {
            method: 'post',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'multipart/form-data'
            },
            body: formData
        }`)`

편집: 이 경우 서버는 폼 데이터 제출을 통해서만 내용을 식별했습니다.요청 본문을 json으로 읽기 위해 코드가 작성되지 않았습니다.따라서 서버 측 코드에도 문제가 있을 수 있습니다.

Express 서버를 사용하여 요청을 처리하는 경우 다음 행에 추가해야 합니다.

app.use(express.json({limit:'1mb'}))

나한테 효과가 있었던 건

app.use(express.json())

내 메인 서버 파일에 저장해당.

다음을 시도해 보십시오.

fetch('/api/v1/users', {
    method: 'post',
    body: JSON.stringify({"user":{
        "email": email,
        "password": password
    }}),
});

API 가져오기

(body-parser)를 app.js/server.js의 선두에 둡니다.

app.use(bodyParser.json());

언급URL : https://stackoverflow.com/questions/39842013/fetch-post-with-body-data-not-working-params-empty

반응형