2016-07-19 10 views
-1

私は、fsメソッドを約束するためにQを使って角度付きスクリプトでノードバックエンドを使用しようとしています。ただし、通常のコールバックメソッドを使用すると、Angularには何も返されません。コンソールに何も表示されず、コンソールまたはノードが実行されている端末でエラーが返されません。私は何を逃したのですか?Qが遅延しているリクエストがリクエストに応答していない

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

しかし、まだ延期された 'deferred.resolve(text)'を解決する必要があります! –

答えて

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"); 
    }); 
}); 
関連する問題