gpt4 book ai didi

dart - Web服务器将数据与文件一起发送

转载 作者:行者123 更新时间:2023-12-03 03:29:39 24 4
gpt4 key购买 nike

我想提供一个html页面以及一些json到客户端,而没有可以在客户端进行处理的往返。这可能吗?最好的方法是什么?我曾考虑过在 header 中发送它,但似乎有些人对此不满意。任何例子都将不胜感激。伪代码:

main(){
...
app.addRequestHandler((req) => req.path == '/user', handler);
}

void handler(req, res) {
var file = new File(myHtmlFile);
res.headers.set(...); //add json here?
res.outputstream... //or here?
...
stream.pipe(res.outputStream);
}

最佳答案

在您的html文件中,您可以放置​​要替换的标记,然后再作为响应发送。

例如,在您的html文件中:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<input type='hidden' id='datas' value="___JSON_DATAS___"/>
...
</body>
</html>
___JSON_DATAS___将在服务器中替换为:

void handler(req, res) {
var file = new File(myHtmlFile);
readStreamAsString(file.openInputStream()).then((fileContent) {
final content = fileContent
.replaceAll("___JSON_DATAS___", htmlEscape(jsonAsString));
res.outputStream.writeAsString(content);
res.outputStream.close();
});
}

String htmlEscape(String text) {
return text.replaceAll("&", "&amp;")
.replaceAll("<", "&lt;")
.replaceAll(">", "&gt;")
.replaceAll('"', "&quot;")
.replaceAll("'", "&apos;");
}

Future<String> readStreamAsString(InputStream stream) {
final completer = new Completer();
final sb = new StringBuffer();
final sis = new StringInputStream(stream);
sis
..onData = () { sb.add(sis.read()); }
..onClosed = () { completer.complete(sb.toString()); }
..onError = (e) { completer.completeException(e); };
return completer.future;
}

然后,在客户端:

import 'dart:html';
import 'dart:json';

main(){
final input = query('#datas') as InputElement;
final datas = JSON.parse(input.value);
//...
}

关于dart - Web服务器将数据与文件一起发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13839281/

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