SyntaxError: Unexpected end of JSON input in my model
SyntaxError: Unexpected end of JSON input in my model
我正在关注这个 tutorial
的第 4 部分
我的 package.json
有以下脚本来 运行 mocha 测试和 运行 节点服务器
"scripts": {
"test": "mocha -r esm ./test/* --exit",
"start": "node -r esm app.js"
},
但是,当我尝试 npm start 时,我得到以下信息
> backend@1.0.0 start /Users/lee33ya/Desktop/mern-app/backend
> node -r esm app.js
/Users/lee33ya/Desktop/mern-app/backend/lib/model.js:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at MessageApp.readFromJson (/Users/lee33ya/Desktop/mern-app/backend/lib/model.js:60:17)
at new MessageApp (/Users/lee33ya/Desktop/mern-app/backend/lib/model.js:15:37)
at Object.<anonymous> (/Users/lee33ya/Desktop/mern-app/backend/lib/controller.js:3:18)
at Generator.next (<anonymous>)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! backend@1.0.0 start: `node -r esm app.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the backend@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lee33ya/.npm/_logs/2020-11-21T05_13_35_510Z-debug.log
类似地,当我尝试 npm test
时,我在与 npm start
相同的文件中遇到类似的 SyntaxError: Unexpected end of JSON input
错误
主要问题似乎出在我在 backend/lib/model.js
中的 readFromJson()
函数中
function newId(array) {
if (array.length > 0) {
return array[array.length - 1].id + 1;
} else {
return 1;
}
}
import fs from 'fs';
import path from 'path';
class MessageApp {
constructor(filepath) {
this.filepath = filepath;
this.messages = filepath ? this.readFromJson() : [];
}
// C
post(content) {
if (content) {
this.messages.push({
content: content,
date: new Date(),
id: newId(this.messages),
});
this.writeToJson();
return this.messages;
} else if (!content) {
return [];
}
}
// R
get(id) {
return this.messages.filter((message) => message.id == id)[0];
}
getAll() {
return this.messages;
}
update(id, update) {
let index = this.messages.findIndex((message) => message.id == id);
if (index >= 0) {
this.messages[index].content = update;
this.writeToJson();
return this.messages;
} else {
return [];
}
}
delete(id) {
let index = this.messages.findIndex((message) => message.id === id);
if (index >= 0) {
this.messages = this.messages.filter((message) => message.id !== id);
this.writeToJson();
return this.messages;
} else {
return 'Message not found in database';
}
}
readFromJson() {
return JSON.parse(
fs.readFileSync(
__dirname + path.normalize(this.filepath),
'utf8',
(err, data) => {
if (err) throw err;
}
)
);
}
writeToJson() {
if (this.filepath) {
const jsonItem = JSON.stringify(this.messages);
fs.writeFileSync(
__dirname + path.normalize(this.filepath),
jsonItem,
(err) => {
if (err) throw err;
}
);
}
}
}
export default MessageApp;
我不太明白我做错了什么,因为我是 nodejs 和 express 的初学者。我该如何解决这个 SyntaxError
?
我的github
查看 backend/lib/json
中的 Github 文件是:
["hello world"]
还有一个空文件。
当然,一个空文件没有格式化为 JSON 并且尝试反序列化将失败。
您可以检查 json docs 了解它是如何工作的,但作为概述 json 期望 { }
或 [ ]
:
{ }
是定义对象。
[ ]
是定义数组。
所以,如果你的文件是空的,它会抛出错误 Unexpected end of JSON input
。
我正在关注这个 tutorial
的第 4 部分我的 package.json
有以下脚本来 运行 mocha 测试和 运行 节点服务器
"scripts": {
"test": "mocha -r esm ./test/* --exit",
"start": "node -r esm app.js"
},
但是,当我尝试 npm start 时,我得到以下信息
> backend@1.0.0 start /Users/lee33ya/Desktop/mern-app/backend
> node -r esm app.js
/Users/lee33ya/Desktop/mern-app/backend/lib/model.js:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at MessageApp.readFromJson (/Users/lee33ya/Desktop/mern-app/backend/lib/model.js:60:17)
at new MessageApp (/Users/lee33ya/Desktop/mern-app/backend/lib/model.js:15:37)
at Object.<anonymous> (/Users/lee33ya/Desktop/mern-app/backend/lib/controller.js:3:18)
at Generator.next (<anonymous>)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! backend@1.0.0 start: `node -r esm app.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the backend@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lee33ya/.npm/_logs/2020-11-21T05_13_35_510Z-debug.log
类似地,当我尝试 npm test
时,我在与 npm start
SyntaxError: Unexpected end of JSON input
错误
主要问题似乎出在我在 backend/lib/model.js
readFromJson()
函数中
function newId(array) {
if (array.length > 0) {
return array[array.length - 1].id + 1;
} else {
return 1;
}
}
import fs from 'fs';
import path from 'path';
class MessageApp {
constructor(filepath) {
this.filepath = filepath;
this.messages = filepath ? this.readFromJson() : [];
}
// C
post(content) {
if (content) {
this.messages.push({
content: content,
date: new Date(),
id: newId(this.messages),
});
this.writeToJson();
return this.messages;
} else if (!content) {
return [];
}
}
// R
get(id) {
return this.messages.filter((message) => message.id == id)[0];
}
getAll() {
return this.messages;
}
update(id, update) {
let index = this.messages.findIndex((message) => message.id == id);
if (index >= 0) {
this.messages[index].content = update;
this.writeToJson();
return this.messages;
} else {
return [];
}
}
delete(id) {
let index = this.messages.findIndex((message) => message.id === id);
if (index >= 0) {
this.messages = this.messages.filter((message) => message.id !== id);
this.writeToJson();
return this.messages;
} else {
return 'Message not found in database';
}
}
readFromJson() {
return JSON.parse(
fs.readFileSync(
__dirname + path.normalize(this.filepath),
'utf8',
(err, data) => {
if (err) throw err;
}
)
);
}
writeToJson() {
if (this.filepath) {
const jsonItem = JSON.stringify(this.messages);
fs.writeFileSync(
__dirname + path.normalize(this.filepath),
jsonItem,
(err) => {
if (err) throw err;
}
);
}
}
}
export default MessageApp;
我不太明白我做错了什么,因为我是 nodejs 和 express 的初学者。我该如何解决这个 SyntaxError
?
我的github
查看 backend/lib/json
中的 Github 文件是:
["hello world"]
还有一个空文件。
当然,一个空文件没有格式化为 JSON 并且尝试反序列化将失败。
您可以检查 json docs 了解它是如何工作的,但作为概述 json 期望 { }
或 [ ]
:
{ }
是定义对象。
[ ]
是定义数组。
所以,如果你的文件是空的,它会抛出错误 Unexpected end of JSON input
。