2012-06-07 5 views
1

현재 런타임시 및 런타임에 메모리의 객체를 생성 및 변경해야하는 node.js 프로젝트를 작성하고 있습니다. 나는 이것이 혼란 스럽다는 것을 알고 있습니다, 그래서 여기에 예가 있습니다.node.js 및 런타임에 모듈을 생성 중/

월요일 오전 10 :

var PI = Math.PI; 

exports.area = function (r) { 
    return PI * r * r; 
}; 

월요일 오전 11시 :

var PI = Math.PI; 
var minSize = 10; 

exports.area = function (r) { 
    if (r >= minSize) { 
     return PI * r * r; 
    } else { 
     return "Error: Minimum size not met."; 
    } 
}; 

월요일 정오 :

var PI = Math.PI; 
var minSize = 10; 
var msg = "Error: Minimum size of " + minSize + "not met.";  

exports.area = function (r) { 
    if (r >= minSize) { 
     return PI * r * r; 
    } else { 
     return msg; 
    } 
}; 

화요일 오전 10시 :

var PI = Math.PI; 
var minSize = 15; 
var error['eng'] = "Error: Minimum size of " + minSize + "not met.";  
var error['chn'] = "錯誤:不符合最小尺寸:" + minSize + "。"  

exports.area = function (r) { 
    if (r >= minSize) { 
     return PI * r * r; 
    } else { 
     return error; 
    } 
}; 

exports.circumference = function (r) { 
    if (r >= minSize) { 
     return 2 * PI * r; 
    } else { 
     return error; 
    } 
}; 

이것은 대부분의 변경 사항을 적절한 계획을 통해 피할 수 있기 때문에 약간의 인위적인 예입니다.하지만 그 점을 설명하기 위해 설명하겠습니다. 이 모듈은 서버가 실행되는 동안 확장되어 변수와 함수 모두를 계속 변경합니다.

  • 를 사용하여 프로토 타입 상속은 (어떤 키워드 "새로운")
  • 이 변경 함수의 다음 호출에 적용이
  • 변경이 새로운 변수의 추가를 포함하지 않고 : 여기

    내가이 제한됩니다
  • 변경이 서버에 저장해야 할 기능은
  • 는 평가()
를 사용할 수 없습니다 다시 시작 나는 두 가지 전략을 생각했습니다

:

  1. .prototype를 사용하여/변경 기능과 변수를 추가하는 것을 계속한다.

    • 장점 : 서버가
    • 단점을 실행으로 그것을 할 수 : 나는 그것을 파일에 저장하는 방법을 모르겠어요. 내가 아는 한, 나는 어떤 방법
  2. 파일을 직접 편집하고 node-supervisor 같은 것을 통해 그들을 다시로드의 평가()를 사용하지 않고 파일에 함수를 저장할 수 없습니다.

    • 장점 : 변화는 이상 저장됩니다 버전은 저장
    • 단점에 다시 복귀 할 수있다 : 누군가 경우, 더 많거나 적은, 즉 평가()를 사용하여 동일한 결과를했을 파일을 직접 편집하는 생각 시스템이 악의적 인 것을 몰래 빠져 나올 수 있습니다. 내가 지금 생각할 수있는 전부

. 이 지역의 의견이나 옵션을 고맙게 여길 것입니다.

답변

0
나중에 참조

:

  • node.js' vm module 효과적으로 실행 샌드 박스와 그 범위 밖의 변수에 대한 액세스를 방지 할 runInContext() 여러 기능을 갖는다. 가능한 벤치 마크, 다른 버전의 차이점에 대해 설명 a blog entry here는 Node.js를위한 sandbox 모듈을 사용할 수
  • 있습니다
  • 있습니다
  • 샌드 박스에서 가지를 실행의 단점은 실행이 많이 느린 것입니다

결론 : 함수를 저장하고 샌드 박스의 범위 내에서 안전하게 실행할 수 있다는 것은 불가능하지 않습니다. 실용적이지 않습니다.

대체 솔루션 : 함수 자체가 너무 복잡하지 않은 경우 DSL 형태로 호출을 저장 한 다음 다시 구문 분석하는 것은 불가능하지 않습니다.

관련 문제