我需要在NodeJS中调用第三方API服务器,如下所示,我需要在from pyspark.sql.types import StructField, DoubleType
StructField(
"label", DoubleType(), False,
{"ml_attr": {
"name": "label",
"type": "nominal",
"vals": ["0.0", "1.0", "2.0"]
}}
)
方法中使用req
和resp
。
由于我需要使用很多API,因此每次使用request()
时我都不希望set headers
和set response cookies
。
我可以做些什么来拦截request()
?
request()
答案 0 :(得分:1)
我的团队最近写了一篇关于在Node.js中拦截HTTP请求的博客。所介绍的方法并非特定于request
软件包,而是适用于任何软件包。继续阅读:https://blog.bearer.sh/http-api-instrumentation-nodejs/
答案 1 :(得分:0)
如果我理解正确,您希望避免每次都将相同的选项传递给request
您可以简单地创建一个辅助函数,为您调用它:
function apiRequest(url, req, cb) {
request({
url: url,
method: "POST",
json: true,
headers: {'session_id' : req.cookies.session_id},
body: {
"tel": req.body.tel, "code": req.body.code,
"password": req.body.passwd, "referee": req.body.recommend
}
}, cb)
}
// Your previous code becomes
router.post('/register', function (req, resp) {
apiRequest("/user/register", req, function (err, response, body) {
resp.cookies('session_id', response.headers['sessionId'])
resp.json(body)
})
});
当然,如果您为此添加错误处理会更好(例如,检查req
是否未定义,req.body.X
是否存在等等。)
答案 2 :(得分:0)
不是很优雅,但你总是可以围绕请求
创建自己的包装器e.g。
var request = require('request');
exports.postJsonWithCookie = function(url, payload, req, resp) {
request({
url: url,
method: "POST",
json: true,
headers: {'session_id' : req.cookies.session_id},
body: payload
}, function (error, response, body) {
resp.cookies('session_id', response.headers['sessionId'])
resp.json(body)
});
}
然后在你的路线定义中你可以做
var request = require('./myrequest');
router.post('/register', function (req, resp) {
var payload = {
"tel": req.body.tel,
"code": req.body.code,
"password": req.body.passwd,
"referee": req.body.recommend
}
request.postJsonWithCookie("/user/register", payload, req, resp);
});