2016-07-19 16 views
-1

Ich versuche, ein Knoten-Backend mit meinem eckigen Skript mit Q zu verwenden, um eine fs-Methode zu versprechen. Die normale Callback-Methode funktioniert, hier wird jedoch nichts an Angular zurückgegeben. In der Konsole wird nichts gedruckt, und in der Konsole oder im Terminal, auf dem der Knoten ausgeführt wird, wird kein Fehler zurückgegeben. Was habe ich verpasst?Express mit Q zurückgestellt reagiert nicht auf Anfragen

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 (Text)' in Ihrer Node-Datei?! dann 'return deferred.promise;'! –

+0

@IsmailRBOUH mein Fehler, das war eine schlechte Kopie Paste. Das ist momentan was. – 1252748

+0

Aber Sie müssen noch Ihre aufgeschobene 'lat. Resolve (Text)' auflösen! –

Antwort

2

Express unterstützt keine Versprechen aus der Box. Ein Versprechen eines Handlers zurückzugeben, bedeutet nichts. Sie müssen immer noch explizit res.send anrufen (obwohl es modules such a express-promise gibt, um dies zu erleichtern).

Dies ist, was Ihr Code sollte wie folgt aussehen:

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"); 
    }); 
});