这是我的第一个nodejs项目,我仍然试图让异步调用挂起,所以请耐心等待。所以在我的路线中,我已经将'/ users / username'注册到一个函数,该函数将读取一个文件(理想情况下是一个数据库,但现在我正在从一个文件中读取)。现在我可以选择打电话 fs.readFileSync我想避免。如何将回调传递给fs.readFile,然后将响应发送回客户端?
代码:
var getData = function(key){
try {
fs.readFile(__dirname + '/users.json', function(err, tenantsJSON){
var parsedConfig = JSON.parse(tenantsJSON.toString());
if (!parsedConfig.hasOwnProperty(key)){
throw {
name: key + "NotFound",
error: "key " + "does not exist.",
status: 404
}
}
return parsedConfig[key] //How do I pass the response from here
});
} catch (e) {
console.error(String.format("File {0} not found or is invalid: {1}",'config.json', e.message));
throw {
name: "Internal server error",
error: "Internal server error",
status: 500
}
}
}
在路线中:
router.get('/users/:username', auth, function(req, res, next) {
///How do I get the read file back here??
var body = getData(req.params.username);
})
答案 0 :(得分:1)
您可以通过将回调传递给getData()
:
var getData = function(key, callback) {
然后在readFile()
中调用此回调:
fs.readFile(__dirname + '/users.json', function(err, tenantsJSON) {
if (err) {
return callback(err);
}
// ...
callback(null, parsedConfig[key]);
});
然后在路由器中:
router.get('/users/:username', auth, function(req, res, next) {
getData(req.params.username, function (err, body) {
// ...
next();
});
});