2017-03-08 4 views
1

저는 REST와 Express를 사용하는 데있어서 처음이에요. 그리고 난 다음에이 tutorial을 REST API에 따라 왔습니다.POST 메서드를 사용하는 경우 Node.js req.body가 비어 있습니다.

var express = require('express'); 
var bodyParser = require('body-parser'); 
var mongoose = require("mongoose"); 

var app = express(); 
var port = parseInt(process.env.PORT, 10) || 3000; 

app.use(bodyParser.urlencoded({ extended: true})); 
app.use(bodyParser.json()); 

Genre = require('./models/genre'); 

//Connect to mongoose 
mongoose.connect('mongodb://localhost/bookstore'); 

var db = mongoose.connection; 

app.listen(port); 
console.log('Running on port 3000\n\n'); 

app.post('/api/genres', function(req, res){ 
     console.log(req.body); 
     var genre = req.body; 
     Genre.addGenre(genre, function(err, genre){ 
      if (err) { 
       console.log(err); 
       res.send({status: 'something went wrong'}); 
      }else{ 
      res.send({status: 'saved'}); 
      res.json(genre);} 
     }); 
}); 

내가 POST 요청을 확인하기 위해 파이어 폭스에 나머지 쉬운을 사용하고 있습니다 : 여기 내 app.js 코드입니다. 본문이 비어있어 "Genre Validation failed"오류가 생성됩니다. 이 사용되는 스키마는 다음과 같이 모델에 정의되어있다 : 나는 여러 가지 다른 인기 스레드를 시도했습니다

var mongoose = require("mongoose"); 

//Genre Schema 
var genreSchema = new mongoose.Schema({ 

    name: { 
     type: String, 
     required: true 
    }, 
    create_data:{ 
     type: Date, 
     default: Date.now 
    } 
}); 

var Genre = module.exports = mongoose.model('Genre', genreSchema); 

// add genre 
module.exports.addGenre = function(genre, callback){ 
    Genre.create(genre, callback); 
}; 

하지만 여전히 문제가 해결되지 않습니다. 모듈을 가져 오는 순서를 재 배열하고 'application/x-www-form-urlencoded'를 사용하여 양식으로 데이터를 입력 해 보았습니다. 어떤 생각?

편집 : CONSOLE.LOG의 출력 (req.body)을 console.log (REQ)의

{} 

출력 jsfiddle.net에 jbkb1yxa에있다 (StackOverflow의 습관은 나를 포함 할 수 있습니다. 내가 사과를 저 명성 포인트를 가지고 있기 때문에 더 많은 링크) 쉽게 REST의 스크린 샷 :. http://imgur.com/6QmQqRV

+0

console.log (req) 및 console.log (req.body)의 결과를 표시합니다. POST 요청을 잘못된 형식으로 전달 중일 수 있습니다. 요청 본문이 JSON인지 확인하십시오. 매개 변수를 전달하는 방식의 이미지를 추가 할 수 있습니다. – rresol

+0

POST 요청은 어떻게 작성됩니까? – jfriend00

+0

아마 api에 POST 요청을하는 방법 일 것입니다. – nozari

답변

0

"X-www-form-urlencoded"를 선택하면 콘텐츠 유형에 사용할 수있는 3 가지 옵션 중에서 우편 발송자가 작동합니다.

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

https://github.com/expressjs/body-parser

의 몸 파서 '미들웨어는 JSON을 처리하고, 원시 JSON 데이터 페이로드로 HTTP 게시 작업을 테스트 원시 옵션을 선택, 우체부에서 데이터를

를 urlencoded로 및 참조 다음 헤더 매개 변수를 설정

Content-Type: application/json 

을 또한, 따옴표에 JSON 페이로드에 키/값으로 사용되는 문자열을 포장해야합니다.

body-parser 패키지는 멀티 라인 원시 JSON 페이로드를 잘 분석합니다.

{ 
    "foo": "bar" 
} 
0

당신은 REST 쉬운 측의 데이터 섹션에서 올바른 MIME 유형을 입력 할 필요 :

application/json 
+0

나는 그 일을 시도했지만 여전히 도움이되지 않습니다. –

0

데이터베이스를 호출하면 찾고있는 것을 찾지 못했기 때문일 수 있습니다. 처음 몽구스를 배우기 시작했을 때 큰 어려움을 겪었던 것은 빈 응답이 err으로 잘못 계산 될 것으로 예상했기 때문이었습니다.

res.json 문보다 위에 console.log(genre)을 입력하면 기록되는 내용은 무엇입니까?

궁금한 점이 있다면 res.send 다음에 res.json을 사용하는 이유는 무엇입니까?

+0

else 문이 실행되지 않습니다. if에 남아서 "무언가 잘못되었다"고 인쇄합니다. Genre.addGenre가 콘솔 오브젝트 로깅을하기 전에 [object Object] 로깅합니다. –

0

확인. 아마 확장 문제 일 것 같네요. 동일한 코드를 사용하여 POSTTM 요청을 Chrome에서 POSTMAN을 사용하여 보내면 이제는 정상적으로 작동합니다. 이전에는 우편 발송자조차도 작동하지 않았지만 크롬을 프록시 서버를 사용하지 않도록 구성한 후에는 제대로 작동합니다.

나를 도와 주신 모든 분들께 감사드립니다.

관련 문제