2013-06-02 3 views
4

API를 작성하는 동안 매우 복잡한 오류가 발생했습니다 : (대부분의 AJAX에서 기본값) res.send(INSERT JSON)을 수행하려고하면 invalid json이됩니다. 오류. 콘텐츠 유형을 다른 것으로 설정하면 (예 : text/plain) 올바른 응답을 얻지 만 일부 프런트 엔드 프레임 워크를 사용하려면 application/json을 지원해야합니다.잘못된 JSON GET 요청 Express.js

Error: invalid json 
    at Object.exports.error (/Users/Brad/node_modules/express/node_modules/connect/lib/utils.js:44:13) 
    at IncomingMessage.module.exports (/Users/Brad/node_modules/express/node_modules/connect/lib/middleware/json.js:68:73) 
    at IncomingMessage.EventEmitter.emit (events.js:85:17) 
    at IncomingMessage._emitEnd (http.js:366:10) 
    at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23) 
    at Socket.socket.ondata (http.js:1680:22) 
    at TCP.onread (net.js:410:27) 

내 서버 코드는 다음과 같습니다 : 여기

app.configure(function() { 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser('SALT')); 
    app.use(express.static(__dirname + '/static/')); 
    app.use(express.session()); 
}); 

app.get('/users', function(req, res) { 
    res.send({'test': 'test'}); 
}); 

내 우체부 설정의 사진입니다 - 내 API를 테스트하는 우체부 크롬 확장 프로그램을 사용하고 있습니다 : 여기에 실제 오류 메시지는 enter image description here

+1

코드가 잘 보이고 잘 작동합니다. '잘못된 json'오류가 발생하는 이유는 무엇입니까? – robertklep

+0

'content-type'으로'application/json'으로 GET Request를 만들 때 잘못된 JSON 오류가 발생합니다. 내 질문에 실제 오류를 광고 해 드리겠습니다. –

+1

나는 서버 *로 보내는 데이터가 유효한 JSON이 아님을 의미한다고 생각합니다. 어떻게 테스트하고 있습니까? (어떤 고객)? – robertklep

답변

4

저는 서버 응답에 Content-Type 헤더를 사용하고 싶다고 생각합니다. 귀하의 요청에 Content-Type 헤더가 없습니다.

요청에 Content-Type 헤더를 사용하면 Express는 Content-Type을 읽고 Content-Type (이 경우 JSON)으로 제공된 정보를 해석하려고 시도합니다. 이 요청은 GET 요청이므로 본문이 없기 때문에 Express는 빈 문자열을 JSON으로 해석하려고합니다. 그러면 오류가 발생합니다.

+2

예,'GET'을 위해서 서버는 같은 값 ('application/json')으로 설정된'Accepts' 헤더를 기대할 것입니다. –

+0

'수락'제안에 감사드립니다 - 그건 우편 배달부에서 정말 잘 작동합니다. 그러나이 API를 ember.js의 RESTAdapter에 연결하려고합니다.이 RESTAdapter는 서버에 GET 요청을 보낼 때 여전히 동일한 오류를 발생시킵니다. –

+0

Accepts 헤더는 클라이언트가 기대하는 바를 서버에 알려주는 요청입니다. 서버가 실제로이를 반환 할 것이라는 보장은 없습니다. –