bugfix> node.js > 投稿

私はこれのパート4に従っていますチュートリアル

ぼくの package.json モカテストを実行し、ノードサーバーを実行するための次のスクリプトがあります

 "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 、私は似たようなものを手に入れます SyntaxError: Unexpected end of JSON input と同じファイルでのエラー npm start

主な問題は私の中にあるようです readFromJson() で機能する backend/lib/model.js

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

回答 1 件
  • でGithubを調べます backend/lib/json ファイルは次のとおりです。

    ["hello world"]
    
    

    そして空のファイル。

    もちろん、空のファイルはJSONとしてフォーマットされておらず、逆シリアル化しようとすると失敗します。
    あなたはそれがどのように機能するかを知るためにjsonドキュメントをチェックすることができますが、概要としてjsonは期待しています { } または [ ]

    { } オブジェクトを定義することです。
    [ ] 配列を定義することです。

    したがって、ファイルが空の場合、エラーがスローされます Unexpected end of JSON input

あなたの答え