PUT、PATCH、DELETEはエラーを返しません -- javascript フィールド と mongodb フィールド と rest フィールド と api フィールド と mongoose フィールド 関連 問題

Put, patch and delete don't return errors












1
vote

問題

日本語

現在、JSを使ってREST APIを開発していますが、次のような問題があります。 コードは機能しますが、存在しないエントリを削除、または修正しようとすると、エラーが返されませんが、成功メッセージが表示されます。何故ですか? Get Routeは完璧に機能します。

<事前> <コード> app.route("/verbrauch/:parameterVariable") .get((req, res) => { Verbrauch.findOne({ bezeichnung: req.params.parameterVariable }, (err, gefundeneEintraege) => { if (gefundeneEintraege) { res.send(gefundeneEintraege); } else { res.send("Success"); } }); }) .put((req, res) => { Verbrauch.update({ bezeichnung: req.params.parameterVariable }, { bezeichnung: req.body.bezeichnung, stueckzahl: req.body.stueckzahl, monat: req.body.monat, jahr: req.body.jahr, }, { overwrite: true }, err => { if (!err) { res.send("Success"); } else { res.send(err); } } ); }) .patch((req, res) => { Verbrauch.update({ bezeichnung: req.params.parameterVariable }, { $set: req.body }, err => { if (!err) { res.send("Success") } else { res.send(err); } } ); }) .delete((req, res) => { Verbrauch.deleteOne({ bezeichnung: req.params.parameterVariable }, err => { if (!err) { res.send("Success"); } else { res.send(err); } } ); });
英語

I'm currently developing a REST API with JS, but I have the following problem: The code works but if I try to delete,put or patch a entry which does not exist, it does not return the error but it prints the success message. Why is that? The get route works perfectly.

app.route("/verbrauch/:parameterVariable")      .get((req, res) => {         Verbrauch.findOne({             bezeichnung: req.params.parameterVariable         }, (err, gefundeneEintraege) => {             if (gefundeneEintraege) {                 res.send(gefundeneEintraege);             } else {                 res.send("Success");             }         });     })       .put((req, res) => {         Verbrauch.update({                 bezeichnung: req.params.parameterVariable             }, {                 bezeichnung: req.body.bezeichnung,                 stueckzahl: req.body.stueckzahl,                 monat: req.body.monat,                 jahr: req.body.jahr,             }, {                 overwrite: true             },             err => {                 if (!err) {                     res.send("Success");                 } else {                     res.send(err);                 }             }         );     })       .patch((req, res) => {         Verbrauch.update({                 bezeichnung: req.params.parameterVariable             }, {                 $set: req.body             },             err => {                 if (!err) {                     res.send("Success")                 } else {                     res.send(err);                 }             }         );     })      .delete((req, res) => {         Verbrauch.deleteOne({                 bezeichnung: req.params.parameterVariable             },             err => {                 if (!err) {                     res.send("Success");                 } else {                     res.send(err);                 }             }         );     }); 
</div
              

回答リスト

0
 
vote

これには異なる理由があります。

最初に、データベースに存在しないものを更新しようとすると。結果に誤りを返し、 null> を返します。

次に、Res.Send(Err)を書き込めないでください。 Res.Sendを書くだけでは、ExpressJSは成功の指示であるデフォルトのステータスコードを200として追加します。 あなたは

を与えることができます

res.status(400).send(err)

または

res.status(500).send(err)

 

There are different reasons for this.

Firstly, If you try to update something which does not exist in the database. It will not return err and it will return null in the result.

Secondly, You should not write res.send(err). Because, if you just write res.send then ExpressJs will add default status code as 200 which is an indication for success. You can give

res.status(400).send(err)

or

res.status(500).send(err)

</div
 
 
0
 
vote

updateメソッドは、2つのパラメータ(エラー、writeopresult)を持つコールバック関数を使用します。下の解決策

で試してください <事前> <コード> app.put((req, res) => { Verbrauch.update({ bezeichnung: req.params.parameterVariable }, { bezeichnung: req.body.bezeichnung, stueckzahl: req.body.stueckzahl, monat: req.body.monat, jahr: req.body.jahr, }, { overwrite: true }, (err,res) => { if (!err) { res.send("Success"); } else { res.status(404).send(err); } } ); })
 

Update method will be with callback function with 2 parameters(error, writeOpResult). Try with below solution

app.put((req, res) => {     Verbrauch.update({             bezeichnung: req.params.parameterVariable         }, {             bezeichnung: req.body.bezeichnung,             stueckzahl: req.body.stueckzahl,             monat: req.body.monat,             jahr: req.body.jahr,         }, {             overwrite: true         },         (err,res) => {             if (!err) {                 res.send("Success");             } else {                 res.status(404).send(err);             }         }     ); }) 
</div
 
 

関連する質問

0  MongoDB - ローカルデータベースと接続している間のエラーの取得  ( Mongodb getting error while connect with local data base ) 
ユーザーが詳細を送信するときにユーザーリストを作成しようとしています。 app.js では、その機能があります。 これと同じように: <事前> <コード> app.post('/addList', userList.submit); 私はuserlist...

1  Mongoose、テキストを検索していません  ( Mongoose text search multiple fields not working ) 
これは私のモデルです、 <事前> <コード> var InternetSchema = new Schema({ name: String, company: String, contactNumber:String, accessToken...

8  Mongoose(Node.js)の製品システムのさまざまな属性を定義する方法  ( How to define varying attributes for a product system in mongoose node js ) 
私はユーザーがお互いにアイテムを販売することができるパーソナルショップアプリを構築していますが、私は製品の管理方法を考え出しています。たとえば、Tシャツを販売したい場合は、サイズと色などを選択できるはずですが、コンピュータを販売する場合は、YEAR、CPU電源...

1  Mongooseを使用して他の文書フィールドなしで特定のユーザーによるすべてのコメントを返す  ( Returning all comments by a specific user without other document fields using mo ) 
<事前> <コード> var mongoose = require('mongoose'); // defines the database schema for this object var schema = mongoose.Schema({ pr...

0  MongoError:式$ inは正確に2つの引数を取ります。 1が渡されました。 '{$ in:[<expression>、<配列式>]}'が機能しない  ( Mongoerror expression in takes exactly 2 arguments 1 were passed in in ) 
私は以下のクエリを実行しようとしています。 <コード> update.keywords および<コード> update.genre は文字列の配列です。 MongoDB v4.4.0 を使用しています <事前> <コード> let similar = awai...

0  REQをコピーするエラーMongooseモデルへの役割  ( Error copying req body properties into mongoose model ) 
まず私は角度とノード技術が新たになっていると言わなければなりません。だから私の無知に申し訳ありません。 エディションビューからエンティティを保存しようとすると、パス "category" 'の "objectidへのキャストに失敗しました" ええ、私はこれら...

0  MongoDB / Mongooseは、競合のない2つのDBエントリをペアリングしますか?  ( Mongodb mongoose how do i pair two db entries without conflicts ) 
追加情報についてはこの質問を参照してください: 順次データベースをペアリングおよび削除するための最善の方法エントリー 大丈夫だから私はあなたがそうするならば「盲戦」のゲームをしています! 基本的にはこのように機能します: 一度に1万人のユーザーが遊んでい...

2  MongoDB AtlasとMongooseが空の配列を返します  ( Mongoose with mongodb atlas return empty array ) 
MongoDB AtlasとMongooseでExpress.jsを接続しようとしていますが、サーバーは常に空の配列 '[]'を返します。ローカルデータベースをロードすると、すべてがうまく機能します(ローカルとMongoDB ATLASは同じ値を持ちます) ...

1  MongooseのMONGOOSEをすべてのMVCファイルに接続します  ( Connecting mongoose to every mvc file in mongoose ) 
MVCの使用: <事前> <コード> Node App Directory App.js Controllers UserController.js OtherController.js Models U...

0  Mongooseを使用したサブドキュメントの更新  ( Updating subdocuments with mongoose ) 
大丈夫、Monkooseでサブ文書(組み込み文書)を更新しようとしています。私は: <事前> <コード> query = 'fanclubs.fanclub_id': fanclub_id fan_update = '...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有