Javascript Node.js无法将字符串传递到res.send();未定义
我是一个Node.js新手,试图通过访问我编写的外部文件中的函数Javascript Node.js无法将字符串传递到res.send();未定义,javascript,node.js,express,fs,Javascript,Node.js,Express,Fs,我是一个Node.js新手,试图通过访问我编写的外部文件中的函数load_blocks(),并使用res.send()调用它,将数据发送回浏览器 我有两个简单的文件: 第一个是典型的app.js文件: const express = require('express'); const app = express(); //import my file const blockchain = require('./load_blockchain.js'); app.get('/', funct
load_blocks()
,并使用res.send()调用它,将数据发送回浏览器
我有两个简单的文件:
第一个是典型的app.js
文件:
const express = require('express');
const app = express();
//import my file
const blockchain = require('./load_blockchain.js');
app.get('/', function(req, res){
res.send('<h3>' + blockchain.load_blocks() + '</h3>');
});
app.listen(3000, function(){
console.log('Example app listening on port 3000!');
});
h3标记不应该读取我现在传递的文件中的数据吗?出什么问题了?加载块()
是异步的。它不会返回已完成的字符串,因为该函数中的读取行代码是异步的,并且在load\u blocks()
返回时尚未完成,因此return\u string
在返回时还没有您想要的值
这是Javascript中一个典型的异步编程问题。load_blocks函数需要在完成其工作时返回承诺或调用回调,调用方必须使用返回的承诺或回调来获得最终结果
有关返回异步值的更多信息,请参阅此处提供的各种选项:
您可以将代码更改为以下内容:
app.get('/', function(req, res){
blockchain.load_blocks().then(val => {
res.send('<h3>' + val + '</h3>');
}).catch(err => {
console.log(err);
res.status(500).end();
});
});
load_blocks()
是异步的。它不会返回已完成的字符串,因为该函数中的读取行代码是异步的,并且在load\u blocks()
返回时尚未完成,因此return\u string
在返回时还没有您想要的值
这是Javascript中一个典型的异步编程问题。load_blocks函数需要在完成其工作时返回承诺或调用回调,调用方必须使用返回的承诺或回调来获得最终结果
有关返回异步值的更多信息,请参阅此处提供的各种选项:
您可以将代码更改为以下内容:
app.get('/', function(req, res){
blockchain.load_blocks().then(val => {
res.send('<h3>' + val + '</h3>');
}).catch(err => {
console.log(err);
res.status(500).end();
});
});
@OscarChambers-该错误意味着您没有正确地实现某些异步代码,并且试图对同一请求发送两个响应。我必须查看执行此操作的实际代码,才能知道建议的内容。@OscarChambers-该错误意味着您没有正确地实现某些异步代码,并且正在尝试对同一请求发送两个响应。我必须查看实际执行此操作的代码,才能知道应该推荐什么。
module.exports = {
load_blocks: function() {
return new Promise((resolve, reject) => {
fs.readFile('/home/blockchain_data/1.dat$', function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
};