2012-04-10 3 views
0

여기에 올바른 질문을하고 있는지 잘 모르겠습니다 ... 그러니 제발 공격하지 마십시오.Node.js에서 createReadStream의 데이터를 대체하십시오.

추적 구현 유형에 대한 자체 비동기 콜백 라이브러리를 만들고 있습니다. 사용자는 고유 계정 번호가 포함 된 코드를 사이트에 설치해야합니다. Google 웹 로그 분석을 생각해보십시오.

라이브러리 호출이 노드 서버에 도달하여 쿼리 매개 변수의 계정 ID를 전달합니다.

노드는 분석 라이브러리로 응답하므로 사용자의 사이트에서 다양한 추적 기능을 호출 할 수 있습니다.

제 질문은 쿼리 매개 변수를 기반으로 사용자 페이지로 다시 스트리밍되는 정적 추적 라이브러리를 어떻게 수정할 수 있습니까? 예를 들어 계정 ID가 쿼리 문자열에서 읽혀지면 DB 조회를 수행하여 해당 라이브러리에있는 특정 값을 찾고 해당 라이브러리에있는 특정 함수를 적절히 수정하려고합니다.

다음과 같이 로컬 서버의 정적 파일을 읽는 중입니다. fs.createReadStream ("./ file.js");

다른 사람들을 위해 특정 값을 대체하기 위해 어떻게 파일을 수정할 수 있습니까?

또는 시작시 메모리 개체에 파일을 읽은 다음 응답 개체를 통해 수정 된 데이터를 간단히 작성해야합니까?

+0

난 당신이 마지막에 제안하는 일을 추천 할 것입니다 - 당신이 읽고 뜻, 메모리에 파일을 읽기가 수정 한 다음 수정 된 파일 – ControlAltDel

+0

을 보내는 모든 요청시 메모리에있는 파일 또는 한 번만 응답하고 응답시 수정 하시겠습니까? – EvilJordan

답변

0

당신은 단순히 환경 또는 이것에 대한 EJS 템플릿을 사용할 수 있지만만을위한 아이디어가 또는이 스스로를 만들기 위해 선호하는 경우에, 나는 당신이 당신의 file.js를 기반으로 템플릿을해야한다고 생각하고 사용자를 작성 코드의 특정 부분을 일련의 정규 표현식을 사용하여 핵심 데이터로 대체합니다.

예를 들어

:

var result = cached_template_data; 
if (!result) { 
    fs.readFile("./template.js", function (err, data) { 
    result = cached_template_data = data; 
    if (!err) { 
     result = result.replace(/%%USER_NAME%%/g, user.name) 
     res.send(result); 
    } else { 
     // Big oops 
     res.send({error:true}, 500); 
    } 
    }) 
} else { 
    result = result.replace(/%%USER_NAME%%/g, user.name) 
    res.send(result); 
} 
:

template.js req.send 다음

var get_user = function() { 
    return "Hi %%USER_NAME%%" 
} 

는()`template.js의 내용은는 다음과 같이 교체

업데이트

는 ... 그런데 가능하면 캐싱을 고려 ​​

+0

나는 이것을 좋아하지 만, 모든 응답에 대해 파일을 메모리에 읽는 것과 "createReadStream"이 고쳐야 할 부분이 무엇인가? – EvilJordan

+0

파일은 한 번만 (또는 템플릿 파일이 수정 될 때마다) 읽어야하며 각 요청에 대해 콘텐츠가 교체되므로 각 사용자에 대한 결과가 캐싱되고 성능 향상을 위해 사용자 데이터 업데이트시 결과가 다시 작성됩니다. –

+0

수정 된 예제 템플릿 콘텐츠의 캐싱을 추가합니다. 그러나 이것이 ** 어떻게 설명 될 수 있는지 기억하십시오. 바퀴를 재발 명할 필요는 없습니다. [* eco *] (https://github.com/sstephenson/eco) 또는 [* ejs *] (http : // embeddedjs.co.kr /) 또는 다른 멋진 템플릿 엔진. –

관련 문제