2016-07-19 3 views
-1

fs 메소드를 약속하기 위해 Q를 사용하는 각도 스크립트로 노드 백엔드를 사용하려고합니다. 그러나 일반적인 콜백 메서드를 사용하면 여기에 아무 것도 Angular로 반환되지 않습니다. 콘솔에 아무 것도 인쇄되지 않으며 콘솔 또는 노드가 실행중인 터미널에 오류가 리턴되지 않습니다. 나는 무엇을 놓쳤는가?Q가 지연된 Express가 요청에 응답하지 않습니다.

var express = require('express'); 
var app = express(); 
var router = express.Router(); 
var FS = require('fs'); 
var Q = require('q'); 

app.use('/bower_components', express.static(__dirname + '/bower_components')); 
app.use('/dist', express.static(__dirname + '/dist')); 

app.get('/', function(req, res) { 
    res.sendfile('./index.html'); 
}); 

app.get('/test', function(req, res){ 
    // res.send('asdf') 
    var deferred = Q.defer(); 
    FS.readFile("gulpfile.js", "utf-8", function (error, text) { 
     console.log('error', error); 
     console.log('in read file') 
     if (error) { 
      deferred.reject(new Error(error)); 
     } else { 
      res.send(text); 
      deferred.resolve(text); 
     } 
    }); 
    return deferred.promise; 
}); 

app.listen(5000); 
+1

'deferred.resolve (텍스트)'노드 파일 :

이 당신의 코드가 같아야 무엇인가?! 그런 다음'return deferred.promise; –

+0

@IsmailRBOUH 저의 실수는 잘못된 사본 붙여 넣기입니다. 그것은 현재 가지고있는 것입니다. – 1252748

+0

하지만 여전히 지연된 '지연된. 확인 (텍스트)'을 해결해야합니다! –

답변

2

Express는 기본적으로 제공되는 약속을 지원하지 않습니다. 핸들러로부터 약속을 되 돌리는 것은 아무런 의미가 없습니다. 이 문제를 쉽게 해결하려면 modules such a express-promise이 있지만 여전히 명시 적으로 res.send으로 전화해야합니다.

app.get('/test', function(req, res){ 
    var promise = Q.ninvoke(FS, "readFile", "gulpfile.js", "utf-8"); 
    promise.then(function (text) { 
     res.status(200).send(text); 
    }, function(error) { 
     console.error(error); 
     res.status(500).send("oops"); 
    }); 
}); 
관련 문제