节点JS /快速路由

时间:2019-11-24 05:55:31

标签: javascript node.js express mongoose

我需要有关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}`);
    },

任何人都可以告诉我我在哪里出问题了吗?谢谢

1 个答案:

答案 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});