如何更新Mean stack中的函数对于crud Basic App

时间:2017-10-22 09:54:32

标签: javascript node.js express mean-stack mean

我正在尝试编写一个基本的MEAN CRUD应用程序,但我目前仍然停留在CRUD的更新部分。以下是我目前的功能。有人可以帮忙吗?

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>

最后,我在

下面添加了getByValue函数的代码
function getByValue(arr, id) {

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

}

很抱歉给您带来不便。

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您获得的错误很可能是由作业返回undefined引起的。至于为什么会发生这种情况,我无法确定。添加一个检查以查看作业和标题是否都存在以捕获错误。 @Ayush提供的答案可能是修复getByValue()函数的解决方案,以便它返回正确的数据,具体取决于req.params.id的格式和作业的id键。 / p>

    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 '});
};

答案 2 :(得分:0)

在此处使用之前,您没有定义数组jobs

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

jobs未定义,使变量job未定义,从而导致错误

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

(除非你在其他地方定义它,这不太可能)。

您可以使用调试器或在console.log(jobs);行上方插入var job来查看作业内容。