問題タブ [koa2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
error-handling - Koa でエラーが発生したときにカスタム ページを表示する
質問の背景は次のとおりです。私はKoa 2を使用してキックオフ コアをフォローしています。しかし、キックオフの演習は Koa 1 用に設計されています。Koa 2 のこの問題に対して問題を作成しました: Koa 2のエラー ハンドラのタスクはパスできません。
要するに、私の問題は、500 エラーが発生したときにカスタム エラー ページを表示する方法です。
コードは次のとおりです。
しかし、私のエラーページは常に「内部サーバーエラー」として表示されます。これはデフォルトのメッセージです。ctx.body = 'Oops! internal server error';
ページを変更できなかったようです。
助けてくれてありがとう!
node.js - NodeJS API のテスト時に外部サービスをモックする方法
統合テストでカバーしようとしているkoaで構築されたJSON APIがあります。
簡単なテストは次のようになります。
ここで問題が発生するのは、コントローラーの背後にあるアクション (POST /users での saveUser など) が外部リソースを使用する場合です。たとえば、ユーザーの電話番号を検証する必要があります。
私のコントローラーは次のようになります。
リクエストオブジェクトをモックできることを望んでいましctx.repo
たが、テストからそれを取得できないようです。つまり、テストが実際に電話番号検証サービスにヒットしていることを意味します。
その検証サービスにアクセスする方法はありますか?
javascript - オブジェクトを追加した後に Koa-session がリセットされますか?
私はキャラクターを検索し、それを使って何かをするコントローラを持っています.コントローラは次のようになります:
処理ctx.session.foundChar = foundChar
すると、何らかの理由でセッションがリセットされたように見え、{}
代わりにセッションのログが表示されます
しかし、私が変更した場合ctx.session.foundChar = "Hello";
< 正常に動作します。
セッションにデータ制限や何かがあるのか 、それともこれが問題ではなかったのかはわかりませんが、express-session
すべてをKoaに変換しようとしていますが、とにかくセッションがリセットされる理由がわかりません.
foundChar
外観の例
したがって、これは適切にログに記録されますが、ページを更新した後、認証されなくなりctx.session
、{}
reactjs - Koa2 に値を渡す方法
koa サーバーに値を渡したい反応アプリがあります。
以下は私のサーバーコードです
クライアントから渡される値を取得できません。何が起こっているか知っていますか?
koa - koa で複数の秘密鍵が必要なのはなぜですか?
申し訳ありませんが、koa で秘密鍵がどのように機能するのかよくわかりません。koa には、次のように使用されるオブジェクトのkeys
フィールドがあります。app
そして、koa-csrf
ミドルウェアを使用する場合、デフォルトでは、ビルトインcsrf.middleware
は によって提供されるキーを使用しませんapp.keys
。デフォルトのミドルウェアを使用する場合、セッションに秘密鍵を設定する別のミドルウェアを作成する必要があります。
Flask を使用するときは、. によって設定された秘密鍵を 1 つだけ指定する必要がありstring
ますarray
。なぜ複数の秘密鍵が必要なのですか? アプリケーション全体に 1 つだけを使用するだけでは十分ではありませんか?
mongoose - mongoose findbyId 内部エラー
Koa 2 と koa-router を使用しています。
ルーターファイル:
URL http://localhost:3000/api/users/にアクセスすると、結果を取得できます。
ただし、ブラウザーで get by id を実行してhttp://localhost:3000/api/users/56bc57c48cc9e78b4ce61206
も何も起こらず、エラーも発生しません。ブラウザは、以前に持っていた Web ページをロードするだけです。
ID を存在しない ID に変更すると、ブラウザーで内部エラーが発生しました。ターミナルに次のように表示されます。
mongodb - mongoose findbyId 内部サーバー エラー
私はユーザーのコレクションを持っています:
私のテストのためだけに、最後のものには Object_id がないことに注意してください。私はKoa2を使用し、async /awaitを使用していますが、影響はないと思います。私のルートは/api/usersにマウントされており、次のようになっています。
http://localhost:3000/api/usersをロードすると、すべてのユーザーが表示されます。
http://localhost:3000/api/users/56d9f3435ce78127510332eaを読み込むと、そのユーザーのみが表示されます。
ただし.... http://localhost:3000/api/users/56bc57c4ea0ba50642eb0418をロードすると、内部サーバーエラーが発生しました。
http://localhost:3000/api/users/whateverを読み込むと、Internal Server Error も表示されます
だから私の質問: findById は常に Object_id を期待していますか? この Object_id がコレクションに含まれていない場合、404 を返すべきではありませんか?
自分の ID でデータをインポートするとどうなりますか? findById メソッドを使用できませんか? この行にコメントしたとしても?let id = ObjectId(ctx.params.id);
404 エラーが発生することはありませんか?
ctx.body = err の ctx.throw (500) を変更すると、常にブラウザに {} が表示されます。たぶんそれが理由です、エラーは空です。しかし、なぜ?