【发布时间】:2019-03-11 18:10:48
【问题描述】:
我在 Windows 上使用 node.js,并带有 express 模块来生成我想从服务器返回数据的 HTML处理函数getfiledata()(即我不想公开我的js或txt文件)。
我一直在尝试使用fetch() 从getfiledata() 返回值。
问题:我无法从getfiledata() 获取数据返回到fetch()。
HTML
<!DOCTYPE html>
<html>
<script type="text/javascript">
function fetcher() {
fetch('/compute', {method: "POST"})
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(JSON.stringify(myJson));
});
}
</script>
<input type="button" value="Submit" onClick="fetcher()">
</body>
</html>
^^ 包含我的 fetch() 函数
服务器
var express = require("express");
var app = express();
var compute = require("./compute")
app.post('/compute',compute.getfiledata);
compute.js
var fs = require('fs');
module.exports={
getfiledata: function() {
console.log("we got this far");
fs.readFile("mytextfile.txt", function (err, data) {
if (err) throw err;
console.log("data: " + data);
return data;
})
}
}
^^ 包含我的服务器端函数
注意:从 compute.js 控制台成功记录:
我们已经走到了这一步
数据:这是文本文件中的数据
但不从以下位置登录: HTML
中的console.log(JSON.stringify(myJson))
我怀疑这是因为我没有设定“承诺”,但我不确定,希望能得到一些关于下一步的指导。
【问题讨论】:
-
这与
fetch无关。查看express文档以了解如何提供 JSON - 您实际上需要编写 HTTP 响应。是的,您不能在readFile回调中使用return。 -
这个问题的一半(从
getfiledata()返回结果)在这里详细介绍:How do I return the response from an asynchronous request。 -
谢谢你,@jfriend00。我认为暂时我会尝试按照下面的答案处理此同步。如果性能成为问题,我已经参考了您链接的页面,以便将来将我的代码更新为异步。
-
@Bergi,我现在可能会将我的代码转换为同步计算,并期待将来“编写 HTTP 响应”。谢谢。
标签: javascript html node.js promise fetch