我正在尝试编写一个基本的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 'title' of undefined</h1>
<h2></h2>
<pre>TypeError: Cannot read property 'title' 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;
}
很抱歉给您带来不便。
答案 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 'title' of undefined
(除非你在其他地方定义它,这不太可能)。
您可以使用调试器或在console.log(jobs);
行上方插入var job
来查看作业内容。