【发布时间】:2021-02-18 15:18:19
【问题描述】:
每当有人向我的服务器发出获取请求时,我都会尝试从 .txt 文件中返回值。 但是有一个问题是,即使我在发送它之前异步等待结果,我也会一直得到未定义的结果。 有人可以帮我吗?
这是我在 get 请求中调用的辅助函数。
const fs = require('fs');
const fileName = './utils/readme.txt'
const getMoviesData = async () => {
fs.readFile(fileName, 'utf8', (err, data) => {
if (err) {
console.log(err)
}
console.log(data) // The text does show up here but not inside of my get request
return data
})
}
module.exports = getMoviesData
这是我的后端代码。
const express = require('express')
const app = express();
// Utility functions (helpers)
const getMoviesData = require('./utils/getMoviesData')
const PORT = process.env.port || 5000
app.get('/', async (req, res) => {
const data = await getMoviesData()
console.log("Returns: " + data) // here is where all my problems start, it returns undefined
res.send(data)
})
app.listen(PORT, () => {
console.log(`Listening on port: ` + PORT)
})
我不明白为什么会这样?我的 async/await 语法错了吗?
【问题讨论】:
-
只是想确保您看到您不必手动承诺
fs.readFile()。您可以使用fs.promises.readFile()在fs模块中使用内置的promise 支持(自v10 起在nodejs 中)。有关详细信息以及执行此操作的非常简单的方法,请参见我的答案。 -
老实说,我不能接受你的两个答案,这让我很生气。你都是对的,两种解决方案都有效。我只是选择了第一个,因为这很公平,stackoverflow 应该可以解决这个问题。我非常感谢您的帮助。
-
没问题。只是想确保您了解在 nodejs 中使用带有文件系统访问的 Promise 的更现代的方式。随着时间的推移,如果您获得更多声望,您就可以对所有有用的答案进行投票(仍然只有“接受”一个)。