2014-11-19 7 views
6

데이터를 클라이언트 측에서 CSV로 내보내려는 시나리오가 있습니다. 내가 텍스트/영역 또는 사용자가 데이터를 입력 할 수있는 곳을 클릭 한 다음 이상적으로 한 번 클릭하면 로컬 CSV 파일이 해당 데이터로 업데이트됩니다.노드 브라우저 내 JS fs 모듈

이것은 서버 상호 작용이있는 NodeJS 및 코어 모듈 (특히 fs 모듈)을 사용하면 쉽게 달성 할 수 있지만 브라우저에서는별로 그렇지 않습니다.

특정 노드 모듈 (예 : underscore)이 RequireJS의 특정 모듈을 브라우저에서 작동시키는 방법을 지원한다는 것을 알게되었습니다.

methods.js

define(['underscore'],function(_) { 

    var Methods = { 
     doSomething: function() { 

      var x = _.size({one: 1, two: 2, three: 3, xuz: 3}); 

      alert(x); 
     } 
    }; 

    return Methods; 
}); 

common.js를

requirejs.config({ 
    baseURL: 'node_modules', 
    paths: { 
     underscore: 'underscore/underscore', 
    } 
}); 

require(['methods'], function(y){ 
    y.doSomething(); 
}); 

index.html을

<script data-main="common" src="require.js"></script> 
<script> 
require(['common'], function() { 

    require(['methods.js']); 
}); 
</script> 
: 그래서 밑줄을 위해 내가 이런 짓을위의 코드는 잘 작동하고 경고 메시지를 표시합니다 : 4.

그러나 fs 모듈을 사용해도 문제가 해결되지 않습니다. fs는, 그들이 util 인 중 하나를 여러 다른 모듈을 필요로하기 때문입니다, 지금까지 내가 이해할 수

Module name "util" has not been loaded yet for context: _. Use require([]) 

: 그것은이 오류가 표시됩니다.

그래서 모든 모듈을 RequireJS 구성에 추가했습니다. 하지만 여전히 운이 없으므로 다른 모듈이 필요하지는 않으므로 특별히 util 모듈을 테스트했습니다.

그리고 지금이 오류에 붙어입니다 : Uncaught ReferenceError: exports is not defined

나는이에 전체 모듈의 소스 코드를 캡슐화하여이 util 모듈을 모듈화 시도 :

define([], function() {}) 

그러나이 중 하나가 작동하지 않았다 .. 나는 또한 underscore의 모델을 복사하려고했지만 여전히 운이 없다. 사람은 RequireJS 또는 Browserify 같은 라이브러리와 브라우저 내에서 util & fs 모듈 (또는 다른 핵심 NodeJS 모듈)을 사용하여 관리하는 경우

그래서 궁금했다.

답변

3

맞아요, exports은 (모듈 외부에서 사용할 수있는 모듈의 일부로 사용되는) 노드 별 JS이며 웹 브라우저에서 지원되지 않습니다.NodeJS가 기술적으로 JS 임에도 불구하고 상호 교환 할 수없는 클라이언트 특정 속성 (예 : 브라우저의 경우 window 속성, NodeJS 앱의 경우 exports)이 있습니다.

즉, here's 클라이언트 측 JS CSV 문제에 대한 답변.

+1

더 많은 조사를 통해 밝혀진 바와 같이 내가받은 두 답은 모두 정확합니다. 내가 (데이터베이스와 클라이언트 측에서 모든 것을 클라이언트 측에서 유지하기 위해) 나의 두 번째 시나리오는 두 개의 NodeJS 서버가 실행 중이다 (하나는 읽기 및 쓰기 용). 이들은 CSV 파일 변경을 수신하고 NodeJS fs 모듈을 통해 파일 시스템에 쓰거나 읽습니다. 이 접근 방식은 전적으로 클라이언트 측이 아니지만 DB 상호 작용 및 유지 보수를 피하고 클라이언트 측에서 서버 측 모두 JS에 있습니다. – zalow517

+0

좋은 하나! 나는 또한 대답 이후 http://browserify.org/에 대해 알게되었다. – FloatingRock

1

가장 좋은 방법은 아마도 HTML5 FileSystem API을 사용하는 것입니다. 나는 어쩌면 플래시 및 이와 유사한 솔루션을 제외하고는 클라이언트 컴퓨터의 파일로 작업 할 수있는 다른 브라우저 기능에 대해서 알고 있지 않습니다.

분명히 Browserify를 사용하고 있지 않으므로 브라우저 인식 태그로 약간 혼란 스럽습니다. 그러면 "수출이 정의되지 않았습니다"라는 문제가 해결됩니다.