带有 Future 对象输出的服务器响应
Server response with output from Future Object
我在另一个文件中创建了一个 async/await 函数,因此它的处理程序返回一个 Future 对象。现在我不明白如何用 Dart 中那个未来对象的内容来回应客户。我正在使用带架子的基本飞镖服务器 package.Below 是代码,其中 ht.handler('list') returns 一个未来对象,我想将该字符串发送给客户端作为响应。但是我收到内部服务器错误。
import 'dart:io';
import 'package:args/args.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as io;
import 'HallTicket.dart' as ht;
// For Google Cloud Run, set _hostname to '0.0.0.0'.
const _hostname = 'localhost';
main(List<String> args) async {
var parser = ArgParser()..addOption('port', abbr: 'p');
var result = parser.parse(args);
// For Google Cloud Run, we respect the PORT environment variable
var portStr = result['port'] ?? Platform.environment['PORT'] ?? '8080';
var port = int.tryParse(portStr);
if (port == null) {
stdout.writeln('Could not parse port value "$portStr" into a number.');
// 64: command line usage error
exitCode = 64;
return;
}
var handler = const shelf.Pipeline()
.addMiddleware(shelf.logRequests())
.addHandler(_echoRequest);
var server = await io.serve(handler, _hostname, port);
print('Serving at http://${server.address.host}:${server.port}');
}
Future<shelf.Response> _echoRequest(shelf.Request request)async{
shelf.Response.ok('Request for "${request.url}"\n'+await ht.handler('list'));
}
分析器会针对您的 _echoRequest
方法发出以下警告:
info: This function has a return type of 'Future', but
doesn't end with a return statement.
如果您检查 addHandler
的要求,您会看到它需要处理程序 returned。
因此您需要添加 return 才能在我的机器上运行:
Future<shelf.Response> _echoRequest(shelf.Request request) async {
return shelf.Response.ok(
'Request for "${request.url}"\n' + await ht.handler('list2'),
headers: {'Content-Type': 'text/html'});
}
我在另一个文件中创建了一个 async/await 函数,因此它的处理程序返回一个 Future 对象。现在我不明白如何用 Dart 中那个未来对象的内容来回应客户。我正在使用带架子的基本飞镖服务器 package.Below 是代码,其中 ht.handler('list') returns 一个未来对象,我想将该字符串发送给客户端作为响应。但是我收到内部服务器错误。
import 'dart:io';
import 'package:args/args.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf/shelf_io.dart' as io;
import 'HallTicket.dart' as ht;
// For Google Cloud Run, set _hostname to '0.0.0.0'.
const _hostname = 'localhost';
main(List<String> args) async {
var parser = ArgParser()..addOption('port', abbr: 'p');
var result = parser.parse(args);
// For Google Cloud Run, we respect the PORT environment variable
var portStr = result['port'] ?? Platform.environment['PORT'] ?? '8080';
var port = int.tryParse(portStr);
if (port == null) {
stdout.writeln('Could not parse port value "$portStr" into a number.');
// 64: command line usage error
exitCode = 64;
return;
}
var handler = const shelf.Pipeline()
.addMiddleware(shelf.logRequests())
.addHandler(_echoRequest);
var server = await io.serve(handler, _hostname, port);
print('Serving at http://${server.address.host}:${server.port}');
}
Future<shelf.Response> _echoRequest(shelf.Request request)async{
shelf.Response.ok('Request for "${request.url}"\n'+await ht.handler('list'));
}
分析器会针对您的 _echoRequest
方法发出以下警告:
info: This function has a return type of 'Future', but doesn't end with a return statement.
如果您检查 addHandler
的要求,您会看到它需要处理程序 returned。
因此您需要添加 return 才能在我的机器上运行:
Future<shelf.Response> _echoRequest(shelf.Request request) async {
return shelf.Response.ok(
'Request for "${request.url}"\n' + await ht.handler('list2'),
headers: {'Content-Type': 'text/html'});
}