7

ノードでjsonファイルを解析しようとしましたが、常にエラーが発生し、グーグルで検索しましたが解決できません。手伝って頂けますか?

undefined:1
undefined
^
SyntaxError: Unexpected token u
at Object.parse (native)
at Object.<anonymous> (app.js:13:19)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

これは私のコードです

var app = express();
var mongodb = require("mongoskin");
var fs = require('fs');

var content;
fs.readFile('./config/db.json', function read(err, data) {
    if (err) {
        throw err;
    }
    content = data;
});
var config = JSON.parse(content);


app.get('/', function(req, res){
    res.send(config.left);
});

app.listen(process.env.VCAP_APP_PORT || 3000);

そしてdb.jsonはこれです。ご覧のとおり、エラーはありません。

{
  "left": 3
}
4

2 に答える 2

7

readFile非同期であるため、JSON.parseに値を割り当てる前に行が呼び出されcontentcontentデフォルト値は。になりundefinedます。

2つのオプションがあります。

  1. データを使用してロジックをコールバックに移動します。

    var app = express();
    var mongodb = require("mongoskin");
    var fs = require('fs');
    
    fs.readFile('./config/db.json', function read(err, data) {
        if (err) {
            throw err;
        }
    
        var config = JSON.parse(data); // <=== Note I'm using `data`, not `content`; we don't need a `content` variable anymore
    
        app.get('/', function(req, res){
            res.send(config.left);
        });
    
        app.listen(process.env.VCAP_APP_PORT || 3000);
    });
    
  2. readFile(は)の同期バージョンを使用しreadFileSyncます。

    // ...
    content = fs.readFileSync('./config/db.json');
    
    var config = JSON.parse(content);
    // ...
    
于 2013-03-04T10:16:44.177 に答える
0

contentundefined解析しようとしたときと同じです。readFileコールバックでJSONデータを解析するか、readFileSync代わりに使用する必要があります。

また、おそらくコールバックからスローするべきではありません。

これにより、node.jsがどのように機能するかについて誤解があると思うので、これを読むことを強くお勧めします

于 2013-03-04T10:18:20.877 に答える