I tried to parse json file in node but there always error and I google it but cannot solve it . Can you help me?
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)
this's my code
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);
and the db.json is this. As you can see, there are no errors.
{
"left": 3
}
readFile
is asynchronous, so your JSON.parse
line is called before you assign a value to content
, and so content
has its default value of undefined
.
You have two options:
Move the logic using the data into the callback.
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);
});
Use the synchronous version of readFile
(which is readFileSync
).
// ...
content = fs.readFileSync('./config/db.json');
var config = JSON.parse(content);
// ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With