2017-10-22 20 views
0

私は基本的な平均CRUDアプリケーションを書こうとしていますが、私は現在CRUDの更新部分に固執しています。以下は私の現時点での機能です。誰でも助けてくれますか?更新方法平均スタックの機能crudのためにBasic App

router.updateJob = function(req,res) { 

var job = getByValue(jobs, req.params.id); 
var oldTitle = job.title; 
var newTitle = req.body.title; 

job.title = newTitle; 

if (oldTitle !== newTitle) 
    res.json({message : 'Title Updated'}); 
else 
    res.json({message : 'Title not Updated '}); 
}; 

以下は、新しいタイトルを送信しようとしたときのエラーです。

<h1>Cannot read property &#39;title&#39; of undefined</h1> 
<h2></h2> 
<pre>TypeError: Cannot read property &#39;title&#39; of undefined 
at router.updateJob (D:\Documents\GitHub\shyft-web-app-dev-2.0\routes\job.js:48:23) 
at Layer.handle [as handle_request] (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\layer.js:95:5) 
at next (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\route.js:137:13) 
at Route.dispatch (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\route.js:112:3) 
at Layer.handle [as handle_request] (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\layer.js:95:5) 
at D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\index.js:281:22 
at param (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\index.js:354:14) 
at param (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\index.js:365:14) 
at Function.process_params (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\index.js:410:3) 
at next (D:\Documents\GitHub\shyft-web-app-dev-2.0\node_modules\express\lib\router\index.js:275:10)</pre> 

は最後に、私は

function getByValue(arr, id) { 

var result = arr.filter(function(o){return o.id === id;}); 
return result ? result[0] : null; 

} 

迷惑をおかけして申し訳ありませんが、以下のgetByValue関数のコードを追加しています。あなたが取得しているエラーが最も可能性が高いundefinedを返すジョブによって引き起こされ

function getByValue(arr, id) { 
    var result = arr.filter(function(o){return o.id.toString() === id.toString();}); 
    return result ? result[0] : null; 
} 
+0

どこにいらっしゃいますか?何が問題ですか ? –

+0

こんにちは、申し訳ありませんが、これは私がアップデートを送信しようとすると受信したエラーです。 –

+0

おそらく[いくつかのドキュメントを読む](https://docs.mongodb.com/manual/crud/)から始めてください。それから、以前に尋ねた人の回答を検索することもできます。あなたは最初ではありません。 –

答えて

0

はこれを試してみてください。それがなぜ起こるかについては、わからない。ジョブとタイトルの両方が存在するかどうかをチェックしてエラーをキャッチします。 @Ayushによって提供される答えは、req.params.idの形式とジョブのidの形式に応じて、正しいデータを返すように、getByValue()関数を修正するための解決策です。

router.updateJob = function(req,res) { 

     var job = getByValue(jobs, req.params.id); 
     if(!job || !job.title){ 
      return res.json({message: 'error while fetching item'}) 
     } 
     var oldTitle = job.title; 
     var newTitle = req.body.title; 

     job.title = newTitle; 

     if (oldTitle !== newTitle) 
      res.json({message : 'Title Updated'}); 
     else 
      res.json({message : 'Title not Updated '}); 
}; 
0

あなたがここに

var job = getByValue(jobs, req.params.id);

jobsを使用する前に、アレイjobsを定義していないことは、あなたにエラー

TypeError: Cannot read property &#39;title&#39; of undefined

を(与えjob未定義の変数を作っ定義されていませんあなたがどこかでそれを定義していない限りse、これはありそうもない)。

var job行のすぐ上にデバッガを使用するか、console.log(jobs);を挿入して、ジョブの内容を確認できます。

関連する問題