Javascript Node.js无法将字符串传递到res.send();未定义

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

我是一个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('/', 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);
                 }
             });
         });
     }
 };