gpt4 book ai didi

javascript - 在 koa.js 路由中发送带有 header 的 post 请求

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:48 25 4
gpt4 key购买 nike

我正在尝试在 koa.js 路由中发送带有 header 的 post 请求,如下所示:

这是请求函数

const request = require('request').defaults({
json: true
});

function *requestPromise(url, method, header, body) {
return new Promise(function (resolve, reject) {
delete header["content-length"];
let newHeader = {
"user-agent": header["user-agent"],
"host": header["host"],
"connection": 'keep-alive'
};
console.log(newHeader)
request({
method: method,
url: url,
body: body,
headers: newHeader
}, function(error, httpResponse, body) {
if (error) {
console.error(url + " : " + error);
} else if (httpResponse.statusCode !== 204) {
reject(body.message);
} else {
resolve(body);
}
});
});
}

路线如下:

    router.post('/v3_6/autoevents', function *() {
// save to db
yield EventAuto.save(this.request.body);

let akkaEndConfig = {
url: "http://127.0.0.1:8080/v3_6/autoevents",
method: 'POST',
header: this.header,
body: this.request.body
};

// request to another server
yield requestPromise(akkaEndConfig.url, akkaEndConfig.method, akkaEndConfig.header, akkaEndConfig.body);

this.status = 204;
});

但是当我想运行这个服务器时,出现了这个错误:

xxx POST /api/v3_6/autoevents 500 195ms -
TypeError: Cannot read property 'name' of undefined
at Object.callee$1$0$ (/koa/src/lib/error-trace.js:10:11)
at tryCatch(/koa/node_modules/regenerator/runtime.js:61:40)
at GeneratorFunctionPrototype.invoke [as _invoke](/node_modules/regenerator/runtime.js:328:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as throw] (/node_modules/regenerator/runtime.js:94:21)
at onRejected (/node_modules/co/index.js:81:24)
at run (/node_modules/core-js/modules/es6.promise.js:104:47)
at /node_modules/core-js/modules/es6.promise.js:115:28
at flush (/node_modules/core-js/modules/$.microtask.js:19:5)
at doNTCallback0 (node.js:428:9)
at process._tickDomainCallback (node.js:398:13)

我只想请求从服务器A到服务器B的路由。这个方法有错吗?

最佳答案

如果您想从 serverA 向 serverB 发送请求,我根据您想要实现的目标创建了一个示例应用程序。

'use strict';
var koa = require('koa');
var route = require('koa-route');
var request = require('request-promise');
var rawBody = require('raw-body');

var appA = koa();
var appB = koa();

appA.use(route.get('/v3_6/autoevents', function *(){
let response = yield request({
method: 'POST',
url: 'http://127.0.0.1:8081/v3_6/autoevents',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ param1: 'Hello World from A' })
});

this.body = response;
}));

appB.use(route.post('/v3_6/autoevents', function *(){
this.req.body = yield rawBody(this.req,{limit:'10kb', encoding:'utf8'});
this.req.body = JSON.parse(this.req.body);
this.body = 'Hello from World B; ' + this.req.body.param1;
}));

appA.listen(8080);
appB.listen(8081);

服务器 A( appA ) 有一个名为 /v3_6/autoevents 的端点,使用 GET 方法,访问它会向服务器 B 的 ( appB ) /v3_6/autoevents 端点发送一个 POST 请求,而该端点反过来会发送一个带有 A 请求正文的 chop 值, 来自 B 的 Hello World;.

使用http://127.0.0.1:8080/v3_6/autoevents在浏览器上执行后的最终输出将是Hello World from B;来自A的Hello World

关于javascript - 在 koa.js 路由中发送带有 header 的 post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38065716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com