簡體   English   中英

node.js回調,嵌套函數,如何重構

[英]node.js callbacks, nested functions, how to refactor

我是Node.js和Express的新手。 我想創建一個Vendor並將其與City對象關聯。

//城市模型var mongoose = require('mongoose');

var CitySchema = new mongoose.Schema({
    name: String
});

//供應商模型

var mongoose = require('mongoose');

var VendorSchema = new mongoose.Schema({
    name: String,
    city: { type: mongoose.Schema.Types.ObjectId, ref: 'City' }
});


mongoose.model('Vendor', VendorSchema);

//routes/index.js

vendor.save(function)在City.findOne(function)內部,看上去有點難看。 我希望代碼遵循單一職責規則,或者說使代碼更簡潔。 編寫這些嵌套的回調函數的最佳實踐是什么?

非常感謝你。

mongoose.model('City', CitySchema);

router.post('/vendor', function(req, res, next){
    var vendor = new Vendor();
    vendor.name = req.body.name;

    City.findOne({name:req.body.city}, function(err, city) {
        if (err) return next(err);
        vendor.city = city;

        vendor.save(function(err, vendor) {
            if (err) { return next(err); }
            res.json(vendor);
        });
    }); 
});

您可以嘗試使用Model.populate()

var Vendor = mongoose.model('Vendor', VendorSchema);

var opts = [{ path: 'city', match: { name: req.body.city}}];

var vendor = new Vendor({
    name: req.body.name
});

Vendor.populate(vendor, opts, function (err, vendor) {
     if (err) { return next(err); }
            res.json(vendor);
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM