Node.js를 사용하여 복잡한 JSON 응답을 반환하는 방법
nodejs 및 express를 사용하여 JSON을 사용하여 하나 또는 여러 개체(어레이)를 반환하고 싶습니다.아래 코드에서는 JSON 오브젝트를 1개씩 출력합니다.작동은 하지만 이건 내가 원하는 게 아니야.오브젝트가 많기 때문에 생성된 응답은 유효한 JSON 응답이 아닙니다.
어레이에 모든 개체를 추가하고 특정 어레이를 res.end로 반환하기만 하면 된다는 것을 잘 알고 있습니다.다만, 처리나 메모리의 부하가 높을 가능성이 있습니다.
nodej를 사용하여 이 문제를 해결하는 적절한 방법은 무엇입니까?query.는 각각 올바른 호출 방식입니까?
app.get('/users/:email/messages/unread', function(req, res, next) {
var query = MessageInfo
.find({ $and: [ { 'email': req.params.email }, { 'hasBeenRead': false } ] });
res.writeHead(200, { 'Content-Type': 'application/json' });
query.each(function(err, msg) {
if (msg) {
res.write(JSON.stringify({ msgId: msg.fileName }));
} else {
res.end();
}
});
});
express 3에서는 res.json({foo:bar})을 직접 사용할 수 있습니다.
res.json({ msgId: msg.fileName })
매뉴얼을 참조
이것이 실제로 다른지는 모르겠지만 쿼리 커서 위에 반복하는 것이 아니라 다음과 같은 작업을 수행할 수 있습니다.
query.exec(function (err, results){
if (err) res.writeHead(500, err.message)
else if (!results.length) res.writeHead(404);
else {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(JSON.stringify(results.map(function (msg){ return {msgId: msg.fileName}; })));
}
res.end();
});
[편집] Mongoose 문서를 확인하면 각 쿼리 결과를 별도의 청크로 전송할 수 있습니다.Web 서버는 기본적으로 청크 전송 인코딩을 사용하기 때문에 유효한 JSON 개체를 만들기 위해 항목을 배열로 감싸기만 하면 됩니다.
대략적인 (테스트되지 않은)
app.get('/users/:email/messages/unread', function(req, res, next) {
var firstItem=true, query=MessageInfo.find(/*...*/);
res.writeHead(200, {'Content-Type': 'application/json'});
query.each(function(docs) {
// Start the JSON array or separate the next element.
res.write(firstItem ? (firstItem=false,'[') : ',');
res.write(JSON.stringify({ msgId: msg.fileName }));
});
res.end(']'); // End the JSON array and response.
});
또는 말씀하신 대로 어레이 콘텐츠를 그대로 전송할 수도 있습니다.이 경우 응답 본문이 버퍼링되어 즉시 전송됩니다.이 경우 결과 세트에 필요한 메모리보다 많은 메모리가 대량으로 소비될 수 있습니다.예를 들어 다음과 같습니다.
// ...
var query = MessageInfo.find(/*...*/);
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify(query.map(function(x){ return x.fileName })));
언급URL : https://stackoverflow.com/questions/8905613/how-to-return-a-complex-json-response-with-node-js
'programing' 카테고리의 다른 글
MongoDB 콘솔에서 _id로 삭제 (0) | 2023.03.26 |
---|---|
Word press jquery 및 $ 기호 사용 방법 (0) | 2023.03.26 |
데이터베이스의 테이블 열에 색인을 작성할 시기를 결정하시겠습니까? (0) | 2023.03.26 |
뒤로 버튼을 Angular와 함께 사용하려면 어떻게 해야 합니까?JS UI 라우터 상태 시스템? (0) | 2023.03.26 |
React(이형 앱)에서 API 호출 시 'Access-Control-Allow-Origin' 문제 발생 (0) | 2023.03.21 |