【问题标题】:Insert embedded document in mongodb via angularjs通过 angularjs 在 mongodb 中插入嵌入文档
【发布时间】:2016-02-06 02:26:50
【问题描述】:

我正在尝试通过 AngularJS 在 MongoDB 中插入嵌入式文档。 父文档已存在。这是嵌入文档的架构

offers: [{
        date: Date,
        offer: {
            id: mongoose.Schema.ObjectId,
            added: {
                type: Date,
                default: Date.now()
            },
            displayName: String,
            creator: Number,
            //creator: {
            //    type: mongoose.Schema.Types.ObjectId,
            //    ref: 'User'
            //},
            photo: String,
            description: String,
            additional: {
                name: String,
                data: String
            }
        },
        linkedBy: Number
    }],

这是我的路由器

router.post('/',expositionController.create);
router.get('/',expositionController.getAll);
router.get('/:id',expositionController.get);
router.put('/:id',expositionController.update);
router.delete('/:id',expositionController.delete);

router.post('/:id/offer',expositionController.createOffer);

在控制器中创建offer方法

exports.createOffer = function(req,res){
    var id = req.params.id;
    try{
        id = new ObjectId(id);
        Exposition.findById(id,function(err,exposition){
            if(err){
                res.send(err);
            }
            exposition.offer = new Offer(req.body.offer);
            exposition.save(function(err){
                if(err)
                    res.send(err);
                res.json({message: "Ok"});
            });
        });
    }catch(e){
        res.send(404);
    }
};

这是来自 AngularJS 控制器的代码,其中插入了报价

$scope.createOffer = function (_id) {
            var offerResource = new OfferResource();
            offerResource.offer = new OfferUpdateService();
            offerResource.offer.name = $scope.offer.name;
            offerResource.offer.photo = $scope.uploadPhoto;
            offerResource.offer.description = $scope.offer.description;
            offerResource.$save(function (result) {
                $scope.offer.name = '';
                $location.path("/exposition/")
            });
        };

和 AngularJS 路由

$stateProvider
.state('offer', {
                url: "/:id/offer/",
                templateUrl: 'app/exposition/listOffers.tpl.html',
                controller: 'ExpositionsController'
            })

当我尝试插入报价时,出现错误

http://localhost:3000/exposition/offer 404 not found

我做错了什么?

谢谢!

【问题讨论】:

    标签: javascript angularjs node.js mongodb


    【解决方案1】:

    错误 404 它关于在这种情况下 URL 的资源不存在发帖, 试试这条路线:

    router.post('/offer/:id',expositionController.createOffer);

    您也可以尝试使用 get 定义路由,仅通过 GET/浏览器粘贴 url 查看响应和访问资源:

    router.get('/offer/:id',expositionController.createOffer);

    例如,如果您创建此路由,您只能通过 GET 接收属性:

    router.get('/offer/:id',expositionController.createOffer);
    

    你调用: 将此网址粘贴到浏览器中 http://localhost:3000/exposition/offer/0001

    您可以将 id 记录到预期值:

    exports.createOffer = function(req,res){
    console.log(req.params.id)
    var id = req.params.id;
    try{
        id = new ObjectId(id);
        Exposition.findById(id,function(err,exposition){
            if(err){
                res.send(err);
            }
            exposition.offer = new Offer(req.body.offer);
            exposition.save(function(err){
                if(err)
                    res.send(err);
                res.json({message: "Ok"});
            });
        });
    }catch(e){
        res.send(404);
    }
    

    };

    【讨论】:

    • 嗯,但是我在哪里可以得到 exposition._id?
    • 在这种情况下,您仅通过 URL 接收参数,并通过请求对象发布发送参数
    • 好的,但是在你提到的 url 中没有 exposition._id
    • eeeh,如果它会更早一点......我已经重新考虑了我的结构并按照你提到的那样做了。无论如何,谢谢!
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2011-01-09
    • 2020-09-18
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多