2016-07-19 4 views
-1

Я пытаюсь использовать бэкэнд узла с моим угловым скриптом, используя Q, чтобы обещать-fy метод fs. Использование обычного метода обратного вызова работает, однако здесь ничего не возвращается в 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

Экспресс не поддерживает обещания из коробки. Возвращение обещания от обработчика ничего не значит для него. Вам все равно нужно позвонить res.send явно (хотя для этого есть modules such a express-promise).

Это то, что ваш код должен выглядеть следующим образом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^