정규 표현식, 날짜 및 기능을 포함하는 JSON의 슈퍼 세트 로 JavaScript를 직렬화하십시오.
이 패키지의 코드는 Express-State의 내부 모듈로서의 수명을 시작했습니다. 유용성을 확장하기 위해 이제는 NPM의 독립적 인 패키지 인 serialize-javascript 로 사용됩니다.
당신은 아마 궁금합니다 : JSON.stringify() !? 우리는 때때로 JavaScript 함수 , Regexps , 날짜 , 세트 또는 맵을 직렬화해야한다는 것을 알았습니다. 좋은 예는 경로 정의가 서버에서 클라이언트로 공유 해야하는 regexps 인 클라이언트 측 URL 라우팅을 사용하는 웹 앱입니다. 그러나이 모듈은 또한 노드 프로세스간에 통신하는 데 좋습니다.
이 패키지의 단일 내보내기 기능에서 반환 된 문자열은 리터럴 자바 스크립트이며 .js 파일에 저장하거나 <script> 요소의 내용을 만들어 HTML 문서에 포함시킬 수 있습니다.
HTML 문자 및 JavaScript 라인 터미네이터가 자동으로 탈출됩니다.
ES6 세트 및 맵의 직렬화에는 Array.from (IE 또는 Node <0.12에서 사용할 수 없음) 또는 Array.from 대한 지원이 필요합니다.
NPM을 사용하여 설치 :
$ npm install serialize-javascript var serialize = require ( 'serialize-javascript' ) ;
serialize ( {
str : 'string' ,
num : 0 ,
obj : { foo : 'foo' } ,
arr : [ 1 , 2 , 3 ] ,
bool : true ,
nil : null ,
undef : undefined ,
inf : Infinity ,
date : new Date ( "Thu, 28 Apr 2016 22:02:17 GMT" ) ,
map : new Map ( [ [ 'hello' , 'world' ] ] ) ,
set : new Set ( [ 123 , 456 ] ) ,
fn : function echo ( arg ) { return arg ; } ,
re : / ([^s]+) / g ,
big : BigInt ( 10 ) ,
url : new URL ( 'https://example.com/' ) ,
} ) ;위의 문자열 출력이 생성됩니다.
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}' 참고 : 아름다운 문자열을 생성하려면 serialize() 에게 선택적 두 번째 인수를 전달하여 들여 쓰기에 사용할 공간 수를 정의 할 수 있습니다.
이 패키지의 주요 기능은 <script> 요소의 내용으로 추가하여 HTML 문서에 포함시킬 수있는 문자 그대로의 문자열로 코드를 직렬화하는 것입니다. 이 안전을 위해 HTML 문자와 JavaScript 라인 터미네이터가 자동으로 탈출됩니다.
serialize ( {
haxorXSS : '</script>'
} ) ;위의 문자열은 다음 문자열 인 HTML에서 에스 케이블 출력을 생성합니다.이 출력은 인라인 스크립트 요소가 종료되지 않으므로 HTML 문서에 안전한 다음에 안전합니다.
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'직선 직렬화를 위해 옵션의
unsafe인수를serialize()로 전달할 수 있습니다.
serialize() 함수는 options 객체를 두 번째 인수로 받아들입니다. 모든 옵션이 undefined 것으로 기본값입니다.
options.space 이 옵션은 JSON.stringify 로 전달할 수있는 space 인수와 동일합니다. 직렬화 된 출력에 공백과 압입을 추가하여 더 읽기 쉽게 만드는 데 사용될 수 있습니다.
serialize ( obj , { space : 2 } ) ; options.isJSON 이 옵션은 직렬화중인 객체에 기능 또는 regexps 값이 포함되어 있지 않다는 신호입니다 serialize() . 이를 통해 직렬화가 3 배 이상 빠를 수있는 핫 경로가 가능합니다. 많은 데이터를 직렬화하고 순수한 JSON을 알고 있다면이 옵션을 활성화하여 속도를 높일 수 있습니다.
참고 : 이 옵션을 사용할 때는 XSS로부터 보호하기 위해 출력이 여전히 탈출됩니다.
serialize ( obj , { isJSON : true } ) ; options.unsafe 이 옵션은 XSS 보호없이 직선 변환을하려는 serialize() 알리는 것입니다. 이 옵션은 명시 적으로 true 로 설정해야합니다. HTML 문자 및 JavaScript 라인 터미네이터는 탈출되지 않습니다. 당신은 당신 자신을 굴려야 할 것입니다.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction 이 옵션은 직렬화 JavaScript 함수를 원하지 않는 serialize() 신호하는 것입니다. JSON.stringify 와 같이 기능을 취급하지만 다른 기능은 예상대로 작동합니다.
serialize ( obj , { ignoreFunction : true } ) ; 일부 사용 사례의 경우 문자열을 사로화해야 할 수도 있습니다. 이것은이 모듈의 일부가 아닙니다. 그러나 쉽게 직접 쓸 수 있습니다.
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} 참고 : 오프닝 브래킷 { 신체의 시작으로 간주되므로 직렬화 된 JavaScript 주변의 괄호를 잊지 마십시오.
이 소프트웨어는 Yahoo!에서 무료로 사용할 수 있습니다. BSD 라이센스. 라이센스 텍스트 및 저작권 정보는 라이센스 파일을 참조하십시오.