我需要有关Node / Express应用程序中路由的一些指导。最初,我根据业务模型创建了一个新业务(运作良好)。创建业务后,我需要一个单独的路由,该路由会添加该业务提供的当前汇率(这些字段将每天更新)。我的业务模型如下所示(出于示例目的而简化):
Me!ExhibitName.setfocus<Enter>
首次创建公司时,仅填充名称,类别,longDesc和图像,以及FX汇率字段的默认值。使用以下路线可以正常工作:
let businessSchema = new mongoose.Schema({
name: String,
category: String,
longDescription: String,
images: [ {url: String, public_id: String} ],
usdHkd: { type: String, default: "" },
hkdUsd: { type: String, default: "" },
rateCreatedAt: {
type:Date,
default:Date.now
},
});
然后我像这样设置单独的路由/控制器,以便随后添加FX汇率,但我认为这些定义不正确:
/* GET business new /business/new */
router.get("/new", isLoggedIn, asyncErrorHandler(businessNew));
/* POST business create /business */
router.post('/', isLoggedIn, upload.fields([{ name: 'images', maxCount: 10 }]), asyncErrorHandler(businessCreate));
我尝试更新时收到的错误消息是:
/* GET business index /business */
router.get('/:id/remittance/new', asyncErrorHandler(remittanceNew));
/* GET business index /business */
router.put('/:id/remittance', asyncErrorHandler(remittanceCreate));
//Remittances New
async remittanceNew (req, res, next) {
let business = await Business.findById(req.params.id);
res.render('remittanceViews/newRemittance', { business });
},
//Business Update
async remittanceCreate (req, res, next) {
let business = await Business.findByIdAndUpdate(req.params.id, req.body.business);
console.log(business);
//update the post with any new properties
business.usdHkd = req.body.business.usdHkd;
business.hkdUsd = req.body.business.hkdUsd;
business.rateCreatedAt = req.body.business.rateCreatedAt;
//save the updated post in the db
business.save();
//redirect to show page
res.redirect(`/business/${business.id}`);
},
任何人都可以告诉我我在哪里出问题了吗?谢谢
答案 0 :(得分:0)
错误消息指示usdHkd
的父变量在未定义中。此错误最有可能来自business.usdHkd
中的business.usdHkd = req.body.business.usdHkd;
(您可以通过在此行周围添加更多console.log()
行并检查输出来确认该错误。
如果business.usdHkd = req.body.business.usdHkd;
错误,则表示business
是未定义。但是,您不需要此行,因为business
已更新findByIdAndUpdate
。
阅读:Model.findByIdAndUpdate()和Promises in Mongoose
//Business Update
async remittanceCreate (req, res, next) {
let business = await Business.findByIdAndUpdate(req.params.id, req.body.business);
console.log(business);
// Below code is not required since findByIdAndUpdate() will update your model
/*
//update the post with any new properties
business.usdHkd = req.body.business.usdHkd;
business.hkdUsd = req.body.business.hkdUsd;
business.rateCreatedAt = req.body.business.rateCreatedAt;
//save the updated post in the db
business.save();
*/
//redirect to show page
res.redirect(`/business/${business.id}`);
},
您告诉我们已定义business
,但尚未更新。原因是findOneAndUpdate()
要求将new
选项设置为true
,否则findOneAndUpdate()
返回旧对象(在某种意义上,在更新之前)。因此,请将remittanceCreate()
的第一行更改为:
let business = await Business.findByIdAndUpdate(req.params.id, req.body.business, {new: true});