从飞镖渡槽后端向邮递员发送回复
sending response to postman from dart aqueduct backend
我创建了一个休息 post 端点,我正在其中进行第三方 API 调用,我从第三方 API 获得的响应作为响应发送来自其余端点
代码如下:
@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);
});
在这一行 return Response.ok(contents.toString()) 我得到 json 转换异常
这是我得到的异常,插入得到这个异常它应该发送 JSON 返回调用 postman:
[SEVERE] aqueduct: POST /uploadurl 1047ms 500 {user-agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36\nconnection : keep-alive\
ncache-control : no-cache\npostman-token : 8ba3e1e9-38c7-37ac-da97-5bb3de983622\naccept-encoding : gzip, deflate, br\ncontent-type : application/json\nsec-fetch-site : cross-site\naccept : */*\nsec-fe
tch-mode : cors\naccept-language : en-US,en;q=0.9\norigin : chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\ncontent-length : 103\nhost : localhost:8888\n} Converting object to an encodable objec
t failed: Instance of 'StringBuffer' #0 _JsonStringifier.writeObject (dart:convert/json.dart:649:7)
#1 _JsonUtf8Stringifier.stringify (dart:convert/json.dart:902:17)
#2 JsonUtf8Encoder.convert (dart:convert/json.dart:371:26)
#3 _FusedConverter.convert (dart:convert/converter.dart:69:48)
#4 Codec.encode (dart:convert/codec.dart:23:32)
#5 Request._responseBodyBytes (package:aqueduct/src/http/request.dart:340:18)
#6 Request.respond (package:aqueduct/src/http/request.dart:251:14)
#7 Controller._sendResponse (package:aqueduct/src/http/controller.dart:339:20)
#8 Controller.receive (package:aqueduct/src/http/controller.dart:176:17)
<asynchronous suspension>
#9 Controller.receive (package:aqueduct/src/http/controller.dart:206:28)
<asynchronous suspension>
#10 Router.receive (package:aqueduct/src/http/router.dart:139:18)
#11 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#12 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#13 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#14 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:134:11)
#15 _MapStream._handleData (dart:async/stream_pipe.dart:234:10)
#16 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:166:13)
#17 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#18 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#19 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#20 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#21 _StreamController._add (dart:async/stream_controller.dart:642:7)
#22 _StreamController.add (dart:async/stream_controller.dart:588:5)
#23 _HttpServer._handleRequest (dart:_http/http_impl.dart:2828:19)
#24 new _HttpConnection.<anonymous closure> (dart:_http/http_impl.dart:2586:19)
#25 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#26 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#27 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#28 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#29 _StreamController._add (dart:async/stream_controller.dart:642:7)
#30 _StreamController.add (dart:async/stream_controller.dart:588:5)
#31 _HttpParser._headersEnd (dart:_http/http_parser.dart:388:17)
#32 _HttpParser._doParse (dart:_http/http_parser.dart:703:15)
#33 _HttpParser._parse (dart:_http/http_parser.dart:320:7)
#34 _HttpParser._onData (dart:_http/http_parser.dart:812:5)
#35 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#36 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#37 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#38 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#39 _StreamController._add (dart:async/stream_controller.dart:642:7)
#40 _StreamController.add (dart:async/stream_controller.dart:588:5)
#41 _Socket._onData (dart:io-patch/socket_patch.dart:1831:41)
#42 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#43 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#44 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#45 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#46 _StreamController._add (dart:async/stream_controller.dart:642:7)
#47 _StreamController.add (dart:async/stream_controller.dart:588:5)
#48 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1379:33)
#49 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:899:14)
#50 _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
#51 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
#52 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#53 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:175:5)
这是我从第三方 API 获得的数据,我正尝试从我的休息区 API 发送作为响应:
{"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;
}
这对我有用。
我创建了一个休息 post 端点,我正在其中进行第三方 API 调用,我从第三方 API 获得的响应作为响应发送来自其余端点
代码如下:
@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);
});
在这一行 return Response.ok(contents.toString()) 我得到 json 转换异常
这是我得到的异常,插入得到这个异常它应该发送 JSON 返回调用 postman:
[SEVERE] aqueduct: POST /uploadurl 1047ms 500 {user-agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36\nconnection : keep-alive\
ncache-control : no-cache\npostman-token : 8ba3e1e9-38c7-37ac-da97-5bb3de983622\naccept-encoding : gzip, deflate, br\ncontent-type : application/json\nsec-fetch-site : cross-site\naccept : */*\nsec-fe
tch-mode : cors\naccept-language : en-US,en;q=0.9\norigin : chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\ncontent-length : 103\nhost : localhost:8888\n} Converting object to an encodable objec
t failed: Instance of 'StringBuffer' #0 _JsonStringifier.writeObject (dart:convert/json.dart:649:7)
#1 _JsonUtf8Stringifier.stringify (dart:convert/json.dart:902:17)
#2 JsonUtf8Encoder.convert (dart:convert/json.dart:371:26)
#3 _FusedConverter.convert (dart:convert/converter.dart:69:48)
#4 Codec.encode (dart:convert/codec.dart:23:32)
#5 Request._responseBodyBytes (package:aqueduct/src/http/request.dart:340:18)
#6 Request.respond (package:aqueduct/src/http/request.dart:251:14)
#7 Controller._sendResponse (package:aqueduct/src/http/controller.dart:339:20)
#8 Controller.receive (package:aqueduct/src/http/controller.dart:176:17)
<asynchronous suspension>
#9 Controller.receive (package:aqueduct/src/http/controller.dart:206:28)
<asynchronous suspension>
#10 Router.receive (package:aqueduct/src/http/router.dart:139:18)
#11 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#12 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#13 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#14 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:134:11)
#15 _MapStream._handleData (dart:async/stream_pipe.dart:234:10)
#16 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:166:13)
#17 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#18 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#19 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#20 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#21 _StreamController._add (dart:async/stream_controller.dart:642:7)
#22 _StreamController.add (dart:async/stream_controller.dart:588:5)
#23 _HttpServer._handleRequest (dart:_http/http_impl.dart:2828:19)
#24 new _HttpConnection.<anonymous closure> (dart:_http/http_impl.dart:2586:19)
#25 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#26 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#27 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#28 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#29 _StreamController._add (dart:async/stream_controller.dart:642:7)
#30 _StreamController.add (dart:async/stream_controller.dart:588:5)
#31 _HttpParser._headersEnd (dart:_http/http_parser.dart:388:17)
#32 _HttpParser._doParse (dart:_http/http_parser.dart:703:15)
#33 _HttpParser._parse (dart:_http/http_parser.dart:320:7)
#34 _HttpParser._onData (dart:_http/http_parser.dart:812:5)
#35 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#36 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#37 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#38 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#39 _StreamController._add (dart:async/stream_controller.dart:642:7)
#40 _StreamController.add (dart:async/stream_controller.dart:588:5)
#41 _Socket._onData (dart:io-patch/socket_patch.dart:1831:41)
#42 _RootZone.runUnaryGuarded (dart:async/zone.dart:1316:10)
#43 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:338:11)
#44 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:265:7)
#45 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:766:19)
#46 _StreamController._add (dart:async/stream_controller.dart:642:7)
#47 _StreamController.add (dart:async/stream_controller.dart:588:5)
#48 new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1379:33)
#49 _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:899:14)
#50 _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
#51 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
#52 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#53 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:175:5)
这是我从第三方 API 获得的数据,我正尝试从我的休息区 API 发送作为响应:
{"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;
}
这对我有用。