如何使用 Mongoose 在 AngularJS 中创建 PUT 函数

Posted

技术标签:

【中文标题】如何使用 Mongoose 在 AngularJS 中创建 PUT 函数【英文标题】:How to create PUT function in AngularJS with Mongoose 【发布时间】:2019-10-19 06:14:35 【问题描述】:

对 Mongo 的 GET 请求有效,但 PUT 无效,我怀疑从控制器到路由器的路径不正确。我试过使用update()findByIdAndUpdate(),但没有成功。我没有点击路由器,如果我这样做了,我没有看到 Mongo 中更新的数据。我正在使用 express、node 和 mongoose。

retail.controller.js


  myApp.controller("RetailController", [
      "RetailService",
      "$routeParams",
      "$http",
      function(RetailService, $routeParams, $http) 
        var self = this;

        //self.isBusy = true;

        self.getMovies = function(id) 
          self.getDetails(id);
          self.getApiMovies(id);
        ;

        // Get data from MongoDB Movies Table
        self.getDetails = function(id) 
          $http(
            method: "GET",
            url: "/movies/data_store/" + id
          ).then(function(response) 
            self.productData = response.data[0];
            console.log(self.productData);
          );
        ;

        self.getApiMovies = function(id) 
          $http(
            method: "GET",
            url: "/movies/api/" + id
          ).then(function(response) 
            let data = response.data.product.item;
            self.apiData = data;
          );
        ;

        self.updatePrice = function(id, data) 
          $http(
            method: "PUT",
            url: "/update/" + id,
            data
          ).then(function(response) 
            console.log(response);
          );
        ;
      
    ]);

retail.router.js

var express = require("express");
var router = express.Router();
var MyRetail = require("../models/myretail.schema");
var request = require("request");

// Data route to API
router.get("/api/:id", function(req, res) 
  var apiURL = "http://redsky.target.com/v2/pdp/tcin/13860428?price";

  request(apiURL, function(error, response, body) 
    if (error) 
      console.log("error making Redsky API request");
      res.sendStatus(500);
     else 
      res.send(body);
    
  );
); // End route to API

// Data route to dB with :id
router.get("/data_store/:id", function(req, res) 
  MyRetail.find( id: req.params.id , function(databaseQueryError, data) 
    if (databaseQueryError) 
      console.log("database query error", databaseQueryError);
      res.sendStatus(500);
     else 
      res.send(data);
    
  );
); // End data route to dB with :id

router.put("/update/:id", function(req, res) 
  console.log(req.body.current_price.value);
  console.log(req.body._id);

  MyRetail.findByIdAndUpdate(
     id: req.body._id ,
     $set:  "current_price.$.value": req.body.current_price.value  
  ),
    function(databaseQueryError, data) 
      console.log(data);
      if (databaseQueryError) 
        console.log("database query error", databaseQueryError);
        res.sendStatus(500);
       else 
        res.send("data updated");
      
    ;
);

module.exports = router;

我正在寻求有关如何完成 PUT 的帮助或正确方向的推动

【问题讨论】:

谢谢 Naing Lin Aung 【参考方案1】:

Angularjs 服务:

 self.updatePrice = function(id, data) 
          var URL = "/update/" + id;
          $http.put( URL, data).then(function (response,error) 
               if (error) 
                    console.log('error : '+JSON.stringify(error));
                else 
                   console.log('response : '+JSON.stringify(response));
               
           )
    ;

服务器端:

router.put('/update/:id', function(req, res) 
   console.log(req.body.current_price.value);
   console.log(req.body._id);
   MyRetail.update(
       id: req.body._id ,
       $set:  "current_price.0.value": req.body.current_price.value  
   ,function(databaseQueryError, data) 
      console.log(data);
      if (databaseQueryError) 
          console.log("database query error", databaseQueryError);
          res.sendStatus(500);
          res.json(message  : "data not updated");
       else 
         res.json(message  : "data updated");
      
    );
  );

试试这个!请输入变量/字段名称

对于$ operator read documentation,您需要在查找查询中包含 current_price。

【讨论】:

以上是关于如何使用 Mongoose 在 AngularJS 中创建 PUT 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 从 mongodb 中选择值

如何将 Mongoose 模型与 angularjs 复选框绑定

AngularJS SPA 使用 API 和 Mongoose

聚合函数在页面刷新时复制 ng-repeat 中的项目。需要弄清楚如何停止重复。 Angularjs Mongodb mongoose

无法通过 express/mongoose/angularjs 从 Mongodb 访问数据

使用 Angularjs 和 Mongoose (meanjs) 创建子文档并保存值