다음은 기본 설정입니다. 나는 내 경로에서 클라이언트 측의 자바 스크립트로 데이터를 직접 쉽게 전달할 수있는 간단한 미들웨어 컴포넌트를 작성하려고한다. (루비에있는 Gon 보석과 매우 비슷합니다.) 내가하고 있어요 방법은 다음과 같습니다 모듈함으로써입니다 :Express.js의 미들웨어 모듈에서 응답 객체에 데이터를 추가해도됩니까?
module.exports = function(){
return function(req,res,next){
var app = req.app;
if(typeof(app) == 'undefined'){
var err = new Error("The JShare module requires express");
next(err);
return;
}
res.jshare = {};
app.dynamicHelpers({
includeJShare: function(req,res){
if(typeof(res.jshare) === 'undefined'){
return "";
}
return function(){
return '<script type="text/javascript">window.jshare=' + JSON.stringify(res.jshare) + '</script>';
}
}
});
next();
};
}
다음을, 내 길에 나는이 작업을 수행 할 수 있습니다
exports.index = function(req, res){
res.jshare.person = {firstName : "Alex"};
res.render('index', { title: 'Express' })
};
을 마지막으로 layout.jade에 :
를!{includeJShare()}
서버 쪽에서 생성 된 정확한 JSON 객체를 생성하는 클라이언트의 자바 스크립트 행을 출력합니다.
여기에 질문이 있습니다. 그것은 모두 예상대로 작동하지만 Express와 Node.js에 일반적으로 익숙하지 않은 경우, 응답 객체에 속성을 연결하는 것이 좋습니다. 아니면 간단히 간과 할 수있는 문제가 있습니까? 어떤 이유로 나는 "냄새 검사"를 통과하지 못하지만 왜 확실하지는 않습니다 .....
답장을 보내 주셔서 감사합니다. 내 코드 샘플을 보면, 내가 한 단계 더 깊숙이 간다고 믿는다. 나는 "res.jshare.person"을 가지고있다. 그게 당신이 의미 한 것입니까? – BFree
네, 그것이 바로 제가 의미했던 것입니다. 나는 당신의 코드를 비판하는 것을 의미하지 않았다, 나는 단지 그것을 강조하고 싶었다. 그래서 당신은 이미 올바른 일을했고 jshare는 다른 라이브러리에서 사용하게 될 일반적인 단어처럼 보이지 않습니다. 좋습니다. :) – hasanyasin
나는 이유도 생각할 수 없다. 그러나 나는 요청에 더 많이 보인 것들을 보았다. 노드와 Connect/Express의 힘은이 오브젝트를 지나칠 때 발생하며, 각 레이어는 자신의 방식대로 확장합니다. Express는 응답 객체에 send()를 추가합니다. –