Zeta.js의 공장 방법
전언
Zeta.js는node를 위한 경량급 백엔드 프레임워크로 많은angular 개념을 도입하여express와 다른 차원의 방식으로 백엔드 코드를 작성할 수 있습니다.Zeta의 중국어 문서입니다.
Source On GitHub
Website For Zeta
개관
어느 정도 공장은 Provider와 비슷한 작업을 완성했지만 후자로 구분되는 것은 모든 새로운 요청 공장에 같은 대상을 공유하는 것이 아니라 새로운 대상을 제공하는 것이다.또한 공장도 대상 자체가 아니라 대상을 되돌려주는 함수여야 한다.많은 상황하에서, 너는 이 두 가지 임무를 마음대로 선택하여 완성할 수 있지만, 확실히 공장을 도입하는 것이 더욱 편리하고 합리적일 수도 있다.
개시하다
플랜트 정의
Provider와 마찬가지로 공장은 모듈에 등록되어 있는데 예를 들면 다음과 같다.
js
demo.factory('$sayhi',function(){ return {content:'hi,world'}; }); //demo is a module
현재, 당신은 $sayhi라는 값이 'Hi, World' 인 속성 콘텐츠의 대상을 가진 공장으로 되돌아왔습니다. 자모 '$' 는 필요하지 않지만, 공장을 일반적인 변수와 구분하기 위해 선택한 공장 이름의 첫머리에 놓는 것을 추천합니다.
공장은 함수를 포함해서 네가 원하는 모든 것을 되돌려 줄 수 있다.
js
demo.factory('$plus',function(){ return function(a,b){ return a+b; }; });
그리고 함수 매개 변수 목록에 추가하기만 하면 공장에서 $scope를 사용할 수 있습니다.$scope에 대한 자세한 내용은 다음 장에서 보실 수 있습니다.
사용 공장
Provider와 같이 공장도 요청 처리 함수에 사용되도록 설계되었다.
js
//$plus is defined in the example before demo.get('/',function($scope,$plus){ $scope.send($plus(1,2).toString()).end(); }); //the client will get '3'
우리가 사용하는 $plus 함수는 정의된 공장 자체가 아니라 공장이 되돌아오는 대상이며, 공장 이름을 요청 처리 함수의 매개 변수 목록에 추가하는 것을 잊지 마십시오.
추출장
Provider처럼 이미 정의된 공장도 찾을 수 있습니다.
js
var plus=demo.factory('$plus')(); console.log(plus(1,2)); //3 will be got var dus=demo.factory('$wel'); dus==undefined//true
간단한 예
다음은 당신이 읽은 이해할 수 없는 부분을 관례대로 소홀히 하는 약간 복잡한 예입니다.
js
//main.js file var zeta=require('zeta'); var demo=zeta.module('demo',['demoFactory']); demo.load(); demo.get('/',function($scope,$plus){ $scope.send($plus(1,2).toString()); });
js
//Factory.js var zeta=require('zeta'); var demoFactory=zeta.module('demoFactory',[]); demoFactory.provider('$plus',function(){ return function(a,b){return a+b;}; });
공장의 계승도 모듈의 의존 주입으로 이루어졌다.
공장 승급
출하 시 Provider 사용
Provider를 사용하는 것은 어렵지 않습니다. 정의된 공장 함수의 매개 변수 목록에 Provider의 이름을 추가하면 됩니다.
js
demo.provider('$wel',{ a:1, b:2, c:3 }); demo.factory('$sum',function($wel){ var sum=0; for(var i in $wel){sum+=$wel[i];} return sum; });
공장 사용 공장
위와 비슷하니 예를 들어 설명하자.
js
demo.factory('$wel',function(){ return { a:1, b:2 }; }); demo.factory('$sum',function($wel){ return function(){ var tmp=$wel(); return tmp.a+tmp.b; }; });
공장의 의미
이미 Provider가 생겼으니 왜 공장의 개념을 도입해야 하는지 물어볼 수도 있다.우선 우리는 표 제출을 처리하는 두 가지 실현 방식을 고려할 것이다.
js
//Use Provider var formidable=require('formidable'); demo.provider('$form',formidable); demo.post('/upload',function($scope,$form){ var tmp=new $form.IncomingForm(); tmp.on('file',function(file){...}); });
js
//Use Factory var formidable=require('formidable'); demo.factory('$form',function(){ return new formidable.IncomingForm(); }); demo.post('/upload',function($scope,$form){ $form.on('file',function(file){...}); });
위의 예를 통해 당신은 양자 간의 차이를 잘 알고 있을 것입니다. 위의 서비스는 두 가지 방식에 대해 편애를 보이지 않지만 쿠키를 처리하는 상황을 고려해 보겠습니다.만약에 우리가 하나의 대상으로 모든 요청에 첨부된 쿠키를 표시하려면 매번 요청한 쿠키가 일치하지 않기 때문에parse의 과정을handler에 남기는 것은 분명히 아름답지 않다. 공장이 생기면 걱정할 필요가 없다.
js
demo.factory('$cookie',function($scope){ var cook={}; cook._val=parse($scope.req.headers['cookie']); cook._option={}; cook.getValue=function(name,optName){...}; cook.setCookie=function(obj){..}; ... });
쿠키와 같은 매번 요청에 새로운 대상이 필요한 경우 공장은 더욱 현명한 선택임을 알 수 있다.
주의 사항
js
demo.factory('$compute',function(){ return function(a,b){return a+b;}; }); demo.factory('$compute')()(1,2)==3//true demo.factory('$compute',function(){ return function(a,b){return b-a;}; }); demo.factory('$compute')()(1,2)==1//true
js
demo.factory('$count',function(){ return {num:0}; }); demo.handler('h0',function($scope,$count){ $count.num++; $scope.go('next'); }); demo.handler('h1',function($scope,$count){ $scope.send($count.num.toString()).end(); }); demo.get('/',['h0','h1']); //the client will get 1 instead of 0
js
demo.factory('$count',function(){ return {num:0}; }); demo.get('/',function($scope,$count){ $scope.send($count.num.toString()); $count.num++; $scope.end(); }); //the client will get 0 every time requesting path '/'
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.