用Q deferred 表示不响应请求
Express with Q deferred not responding to requests
我正在尝试将节点后端与我的 angular 脚本一起使用,使用 Q 来 promise-fy 一个 fs 方法。使用正常的回调方法是可行的,但是在这里,Angular 没有返回任何内容。控制台什么都不打印,控制台和node为运行的终端也没有返回错误。我错过了什么?
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);
Express 不支持开箱即用的 promise。从处理程序返回一个承诺对它来说没有任何意义。您仍然必须显式调用 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");
});
});
我正在尝试将节点后端与我的 angular 脚本一起使用,使用 Q 来 promise-fy 一个 fs 方法。使用正常的回调方法是可行的,但是在这里,Angular 没有返回任何内容。控制台什么都不打印,控制台和node为运行的终端也没有返回错误。我错过了什么?
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);
Express 不支持开箱即用的 promise。从处理程序返回一个承诺对它来说没有任何意义。您仍然必须显式调用 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");
});
});