从dart导水管后端向邮递员发送响应
我已经创建了一个rest post端点,其中我正在进行第三方API调用,并且我从第三方API获得的响应将作为来自rest端点的响应发送 代码如下:从dart导水管后端向邮递员发送响应,dart,aqueduct,Dart,Aqueduct,我已经创建了一个rest post端点,其中我正在进行第三方API调用,并且我从第三方API获得的响应将作为来自rest端点的响应发送 代码如下: @override Controller get entryPoint { String dataRecieved; var completer = new Completer(); var contents = new StringBuffer(); final router = Router(); /
@override
Controller get entryPoint {
String dataRecieved;
var completer = new Completer();
var contents = new StringBuffer();
final router = Router();
// Prefer to use `link` instead of `linkFunction`.
// See: https://aqueduct.io/docs/http/request_controller/
router.route("/uploadurl").linkFunction((request) async {
final req = await request.body.decode();
var envalue = json.encode(req);
print(envalue);
// print( await request.body.decode());
HttpClient client = new HttpClient();
client.badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
var auth = 'Bearer ' +
'eyJ...';
await client
.postUrl(Uri.parse(
'https://<removed>/api/datalake/v3/generateDownloadObjectUrls'))
.then((HttpClientRequest requestSend) {
requestSend.headers
.add("Content-Type", "application/json; charset=UTF-8");
requestSend.headers.add("Authorization", auth);
print(req);
requestSend.write(envalue);
return requestSend.close();
}).then((HttpClientResponse response) async {
print(await response.contentLength);
var resStream = response.transform(Utf8Decoder());
await for (var data in resStream) {
print('Received data: $data');
contents.write(data);
}
print(await response.statusCode);
}).catchError((e) {
print("Request error: $e"); // The only case
});
print(contents);
// var filValue = contents.toString();
return Response.ok(contents);
});
在阅读了互联网上的一些博客后,我找到了一种方法:
@override
Controller get entryPoint {
final router = Router();
HttpClientResponse responseTemp;
// Prefer to use `link` instead of `linkFunction`.
// See: https://aqueduct.io/docs/http/request_controller/
router.route("/uploadurl").linkFunction((request) async {
final req = await request.body.decode();
final envalue = json.encode(req);
HttpClient client = new HttpClient();
client.badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
var auth = 'Bearer ' +
'eyJ...';
await client
.postUrl(Uri.parse('http://example.com/v2/5e104a9235000079001e68e7'))
.then((HttpClientRequest requestSend) {
requestSend.headers
.add("Content-Type", "application/json; charset=UTF-8");
requestSend.write(envalue);
return requestSend.close();
}).then((HttpClientResponse response) async {
responseTemp = response;
}).catchError((e) {
print("Request error: $e"); // The only case
});
await for (var contents in responseTemp.transform(Utf8Decoder())) {
print(contents);
return Response.ok(json.decode(contents.toString()));
}
return Response.noContent();
});
router.route("/secondurl").linkFunction((request) async {
return Response.ok({"key": "adf"});
});
return router;
}
这对我有效。如果这是一个愚蠢的问题,很抱歉,但错误似乎表明您已将一个StringBuffer实例作为参数提供给
Response.ok()
。如果您查看已发布的代码(return-Response.ok(contents);
),但您在文本中说的是其他内容(return-Response.ok(contents.toString());
)。因此,我的问题是,当您遇到异常时,您实际执行的代码是什么?我仍在寻找解决方案,因此我对内容或内容进行了一些更改。toString返回相同的错误更改此行:return Response.ok(contents)
to返回Response.ok(contents.toString())代码>
{"objectUrls":[{"signedUrl":"https://example.com","path":"folder3/sub1/mysensordata.log"}]}
@override
Controller get entryPoint {
final router = Router();
HttpClientResponse responseTemp;
// Prefer to use `link` instead of `linkFunction`.
// See: https://aqueduct.io/docs/http/request_controller/
router.route("/uploadurl").linkFunction((request) async {
final req = await request.body.decode();
final envalue = json.encode(req);
HttpClient client = new HttpClient();
client.badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
var auth = 'Bearer ' +
'eyJ...';
await client
.postUrl(Uri.parse('http://example.com/v2/5e104a9235000079001e68e7'))
.then((HttpClientRequest requestSend) {
requestSend.headers
.add("Content-Type", "application/json; charset=UTF-8");
requestSend.write(envalue);
return requestSend.close();
}).then((HttpClientResponse response) async {
responseTemp = response;
}).catchError((e) {
print("Request error: $e"); // The only case
});
await for (var contents in responseTemp.transform(Utf8Decoder())) {
print(contents);
return Response.ok(json.decode(contents.toString()));
}
return Response.noContent();
});
router.route("/secondurl").linkFunction((request) async {
return Response.ok({"key": "adf"});
});
return router;
}