将承诺的包裹快递路线返回到 app.use()
Returning a promised wrapped express route to app.use()
我希望使快速路线更加模块化。我对使用承诺读取文件然后 return 路由感兴趣。
代码如下:
var express = require('express')
var router = express.Router()
var app = express()
var Promise = require("bluebird")
var fs = Promise.promisifyAll(require("fs"))
function promiseRoute(file){
return fs.readFileAsync(file, "utf8")
.then(JSON.parse)
.then(function(file){
if(!file.url) throw new Error("missing url")
router.get(file.url, function(req, res, next){
return res.redirect("/hello")
})
return router
})
}
app.use(promiseRoute("../file.json"))
var server = app.listen(3000, function () {})
也试过
promiseRoute(path.join(__dirname, "./file.json")).then(app.use)
我遇到了这个错误。
throw new TypeError('app.use() requires middleware functions')
这与承诺。
Unhandled rejection TypeError: Cannot read property 'lazyrouter' of undefined
at use (/project/node_modules/express/lib/application.js:213:7)
at tryCatcher (/project/node_modules/bluebird/js/main/util.js:24:31)
at Promise._settlePromiseFromHandler (/project/node_modules/bluebird/js/main/promise.js:489:31)
at Promise._settlePromiseAt (/project/node_modules/bluebird/js/main/promise.js:565:18)
at Promise._settlePromises (/project/node_modules/bluebird/js/main/promise.js:681:14)
at Async._drainQueue (/project/node_modules/bluebird/js/main/async.js:123:16)
at Async._drainQueues (/project/node_modules/bluebird/js/main/async.js:133:10)
at Immediate.Async.drainQueues [as _onImmediate] (/project/node_modules/bluebird/js/main/async.js:15:14)
at processImmediate [as _immediateCallback] (timers.js:371:17)
也试过这个:
promiseRoute(path.join(__dirname, "./file.json")).then(function(router){
app.use(function(req, res, next){
return router
})
})
我如何return承诺/路由到app.use
?
app.use需要中间件功能。也就是取(req, res, next)
的函数。
总的来说:
app.use(function(req, res, next){
promiseRoute(probably_pass_things_in).nodeify(next);
});
nodeify 是将承诺转换为回调next
。请注意,您可以使用 express 的第三方 promise 中间件。
这成功了:
promiseRoute(path.join(__dirname, "./file.json")).then(function(router){
app.use(router)
})
我希望使快速路线更加模块化。我对使用承诺读取文件然后 return 路由感兴趣。
代码如下:
var express = require('express')
var router = express.Router()
var app = express()
var Promise = require("bluebird")
var fs = Promise.promisifyAll(require("fs"))
function promiseRoute(file){
return fs.readFileAsync(file, "utf8")
.then(JSON.parse)
.then(function(file){
if(!file.url) throw new Error("missing url")
router.get(file.url, function(req, res, next){
return res.redirect("/hello")
})
return router
})
}
app.use(promiseRoute("../file.json"))
var server = app.listen(3000, function () {})
也试过
promiseRoute(path.join(__dirname, "./file.json")).then(app.use)
我遇到了这个错误。
throw new TypeError('app.use() requires middleware functions')
这与承诺。
Unhandled rejection TypeError: Cannot read property 'lazyrouter' of undefined
at use (/project/node_modules/express/lib/application.js:213:7)
at tryCatcher (/project/node_modules/bluebird/js/main/util.js:24:31)
at Promise._settlePromiseFromHandler (/project/node_modules/bluebird/js/main/promise.js:489:31)
at Promise._settlePromiseAt (/project/node_modules/bluebird/js/main/promise.js:565:18)
at Promise._settlePromises (/project/node_modules/bluebird/js/main/promise.js:681:14)
at Async._drainQueue (/project/node_modules/bluebird/js/main/async.js:123:16)
at Async._drainQueues (/project/node_modules/bluebird/js/main/async.js:133:10)
at Immediate.Async.drainQueues [as _onImmediate] (/project/node_modules/bluebird/js/main/async.js:15:14)
at processImmediate [as _immediateCallback] (timers.js:371:17)
也试过这个:
promiseRoute(path.join(__dirname, "./file.json")).then(function(router){
app.use(function(req, res, next){
return router
})
})
我如何return承诺/路由到app.use
?
app.use需要中间件功能。也就是取(req, res, next)
的函数。
总的来说:
app.use(function(req, res, next){
promiseRoute(probably_pass_things_in).nodeify(next);
});
nodeify 是将承诺转换为回调next
。请注意,您可以使用 express 的第三方 promise 中间件。
这成功了:
promiseRoute(path.join(__dirname, "./file.json")).then(function(router){
app.use(router)
})