node.js - TypeError:无法设置 null - 节点和 Mongoose 的属性“brief_title”
问题描述
我有一个使用 Node/Express/Mongo 的应用程序,当我想编辑文档时遇到了麻烦。我可以毫无问题地添加文档,但是当我构建编辑表单时,标题中出现错误。我也可以获取文档并查看我输入的信息。问题是当我尝试保存所做的任何更改时。
这是我的编辑功能:错误发生在 FindByIdAndUpdate 方法中的brief.brief_title = updated_brief_title 处。
exports.postEditBrief = (req, res, next) => {
const briefId = req.body.briefId;
const updated_brief_title = req.body.brief_title;
const updated_country = req.body.country;
const updated_psg = req.body.psg;
const updated_one_year_withholding = req.body.one_year_withholding;
const updated_withholding_only = req.body.withholding_only;
const updated_practice_advisory = req.body.practice_advisory;
const updated_courthouse = req.body.courthouse;
const updated_pages = req.body.pages;
const updated_additional_psg = req.body.additional_psg;
const updated_gangs = req.body.gangs;
const updated_gang_name = req.body.gang_name;
const updated_link = req.body.link;
Brief.findByIdAndUpdate(briefId)
.then(brief => {
brief.brief_title = updated_brief_title;
brief.country = updated_country;
brief.psg = updated_psg;
brief.one_year_withholding = updated_one_year_withholding;
brief.withholding_only = updated_withholding_only;
brief.practice_advisory = updated_practice_advisory;
brief.courthouse = updated_courthouse;
brief.pages = updated_pages;
brief.additional_psg = updated_additional_psg;
brief.gangs = updated_gangs;
brief.gang_name = updated_gang_name;
brief.link = updated_link;
return brief.save();
})
.then(result => {
console.log(Brief);
res.redirect('/');
})
.catch(err => console.log(err));
};
我在 Mongoose 中尝试过各种“查找和更新”方法,但结果是一样的。
解决方案
您需要创建一个object
要更新的数据并将其作为函数中的第二个参数传递,当您执行此操作时,.then()
它会为您获取您正在执行的操作的结果,并且您不需要在.save()
内部调用它
正确的版本应该是这样的
exports.postEditBrief = (req, res, next) => {
const briefId = req.body.briefId;
let update = {
brief_title: req.body.brief_title,
country: req.body.country,
psg: req.body.psg,
one_year_withholding: req.body.one_year_withholding,
withholding_only: req.body.withholding_only,
practice_advisory: req.body.practice_advisory,
courthouse: req.body.courthouse,
pages: req.body.pages,
additional_psg: req.body.additional_psg,
gangs: req.body.gangs,
gang_name: req.body.gang_name,
link: req.body.link
}
Brief.findByIdAndUpdate(briefId, update)
.then(result => {
console.log(result);
res.redirect('/');
})
.catch(err => console.log(err));
};
您可以使用object destructuring
.
更新:
如果您不想覆盖文档,则需要使用$set
withfindOneandUpdate
exports.postEditBrief = (req, res, next) => {
const briefId = req.body.briefId;
let update = {
brief_title: req.body.brief_title,
country: req.body.country,
psg: req.body.psg,
one_year_withholding: req.body.one_year_withholding,
withholding_only: req.body.withholding_only,
practice_advisory: req.body.practice_advisory,
courthouse: req.body.courthouse,
pages: req.body.pages,
additional_psg: req.body.additional_psg,
gangs: req.body.gangs,
gang_name: req.body.gang_name,
link: req.body.link
}
Brief.findOneAndUpdate(briefId, {$set:update})
.then(result => {
console.log(result);
res.redirect('/');
})
.catch(err => console.log(err));
};
推荐阅读
- ms-access - Tableau MS_Access 未返回正确计数
- snowflake-cloud-data-platform - 从 Snowalert 到 Slack 或 AWS SNS 的 POP 警报数据
- sql - SQL-查找商店中最小产品的价格
- c++ - 是什么阻止编译器消除在每个特定上下文中未使用的数据成员?
- flutter - Dart/Flutter POST 请求和流响应
- matlab - matlab单引号?
- android - 错误:语言版本覆盖在库及其部分中必须相同
- ceph - 与 OpenStack Keystone 集成时,RadosGW 返回公共 URL 的 NoSuchBucket 错误
- ios - WKWebView 不显示加载的内容
- vim - 如何跳转到视觉选择的开始/结束