急行アプリ、私はこのコードで私のルータにJSONファイルの内容を読み出す:私の非同期fs.ReadFile関数はどのようにシンクロナスになりますか?私のNode.jsで
lib/functions.js
:
'use strict';
const fs = require('fs');
exports.fsAsync = (callback) => {
fs.readFile(__dirname + '/../database/data.json', 'utf8', (err, data) => {
if(err) {
throw callback(err)
};
callback(null, JSON.parse(data)); // null means no error, return results in callback
});
};
:
routes/contact.js
:
'use strict';
const express = require('express'),
router = express.Router();
const functions = require('../lib/functions'),
fsAsync = functions.fsAsync;
router.get('/', (req, res, next) => {
fsAsync((err, data) => {
if (err) {
return res.render('404', {
title: 'Error 404'
});
}
const contact = data[2].contact;
res.render('contact', {
title: 'Contact',
data: contact
});
});
});
module.exports = router;
ただし、コンソールで同期エラーが発生しました:
(node:12808) WARNING: Detected use of sync API
at fs.statSync (fs.js:981:18)
at tryStat (C:\www\node\site\node_modules\express\lib\view.js:169:15)
at resolve (C:\www\node\site\node_modules\express\lib\view.js:142:14)
at lookup (C:\www\node\site\node_modules\express\lib\view.js:110:17)
at View (C:\www\node\site\node_modules\express\lib\view.js:85:20)
at render (C:\www\node\site\node_modules\express\lib\application.js:569:12)
at render (C:\www\node\site\node_modules\express\lib\response.js:961:7)
at fsAsync (C:\www\node\site\routes\contact.js:23:9)
at fs.readFile (C:\www\node\site\lib\functions.js:18:5)
GET /en/contact 304 154.638 ms - -
誰かがこの関数を真に非同期で書くのに役立ちますか?
https://github.com/expressjs/express/issues/2960 – georg
Upps、これも私の質問でした...あなたの誤りではありません。私のfsAsync機能がないとそこに表示されるエラーは、 'res.render'は非同期モジュールではありません(現時点では)。 – Lanti
これはおそらくこのエラーの原因にもなります。ちょうど "fsAsync"の部分が私を騙しました。 – Lanti