ben*_*ree 20 javascript node.js express
我正在构建一个需要向自己(正在运行的Web服务器)发出HTTP请求的NPM模块.例如:
var url = "http://127.0.0.1:" + (process.env.PORT || 3000) + path;
request(url, function(error, response, body){
...
});
Run Code Online (Sandbox Code Playgroud)
有没有办法通过NodeJS管道处理请求而不实际执行HTTP请求?
或者有更好的方法来形成URL?我很紧张,这127.0.0.1不是处理生产网站最强大的方法.
Jos*_*lik 11
在自耗JSON API中,您可以在某些独立控制器功能中定义某些功能,然后将功能连接到事后表达.我们以库应用程序为例:
module.exports = {
browse: function () {
return Book.findAll()
},
read: function (options) {
return Book.findById(options.book)
},
processLateFees: function () {
// Do a bunch of things to process late fees
}
}
Run Code Online (Sandbox Code Playgroud)
在这个文件中,我们构建了一个将控制器函数转换为HTTP路由的函数.我们采用查询参数并将其作为选项传递给我们的控制器:
module.exports = function toHTTP (func) {
return function (req, res) {
func(req.params).then(function (data) {
res.send(data)
})
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们将控制器连接到我们的http路由器
var express = require('express')
var books = require('./books')
var toHTTP = require('./to-http')
var app = express()
app.get('/books', toHTTP(books.browse))
app.get('/books/:book', toHTTP(books.read))
app.get('/batch-jobs/process-late-fees', toHTTP(books.processLateFees))
Run Code Online (Sandbox Code Playgroud)
因此,我们现在有一个快速应用程序连接到控制器功能.奇妙之处在于我们也可以手动调用这些控制器功能.
var books = require('./books')
books.processLateFees().then(function () {
// late fees have been processed
})
Run Code Online (Sandbox Code Playgroud)
如果您需要更深入的示例,Ghost博客代码库是围绕此模式构建的.这是一个非常翔实的阅读.
Vad*_*est -1
我在我的一个项目中做到了这一点,效果很好。到目前为止,我在开发和生产中使用它没有任何问题,因为我使用了几个带有 3 个不同 Web 服务的 Nodejs 应用程序,这些服务调用自己来登录或检查身份验证。我同时使用express.js和sails.js(基于express.js)
| 归档时间: |
|
| 查看次数: |
7713 次 |
| 最近记录: |