如何将json对象传递给节点js服务器

时间:2016-08-25 19:35:02

标签: angularjs json node.js mongodb

我想创建一个混合移动应用程序,后端是Node js,它将在mongodb中保存数据我的服务器正常工作我准备了处理用户请求的路由

我可以使用GET方法从我的服务器获取数据但我的问题是我无法使用POST方法保存从离子用户界面发出的数据。我尝试使用POSTMAN发送数据,数据在mongodb中成功保存,但是当我从移动用户界面发送数据时出现问题

这是一张图片,用于显示节点js服务器使用POSTMAN发送POST请求的结果 并从移动用户interce发送POST请求

enter image description here

以及如何将数据保存在mongoDB中

enter image description here

这是节点服务器中的路由文件

var Product = require('../models/product');
var express = require('express');
var router = express.Router();

router.route('/products')


    .get(function(req, res) {


      Product.find(function(err, products) {
        if (err) {
          return res.send(err);
        }

        res.json(products);
        });


    })

    .post(function(req, res) {


      console.log(req.body);

      var product = new Product(req.body);


      product.save(function(err) {
        if (err) {
          return res.send(err);
        }

        res.send({ message: 'product Added' });
      });
    });

这是表格

<label  class="item item-input">

            <input name="1" type="text" ng-model="product.nom" placeholder="nom du produit">
          </label>

          <label class="item item-input" >

            <input name="2" type="text" ng-model="product.unite" placeholder="unité de cette produit">
          </label>

          ...


          <div class="item button button-block button-positive" ng-click="createProduct(product)" >
          ajouter le produit
          </div>

这是产品的控制者:

app.controller('productController', function($http, $scope) {



    $scope.createProduct = function (new_prod){

    console.log(new_prod);

    var req = {
                method: 'POST',
                url: "http://localhost:3000/api/products",
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },

                data: new_prod
            };  

    $http(req)
    .then(function(response) {
      console.log(response);


    }); 

    };  

2 个答案:

答案 0 :(得分:2)

如果您要发布JSON,则不应使用application/x-www-form-urlencoded的内容类型。请改用application/json

https://tools.ietf.org/html/rfc4627

application / x-www-form-urlencoded不适用于json,它适用于您在网址中看到的数据:

key=value&foo=bar

答案 1 :(得分:0)

我认为你的问题与CORS有关。

您需要安装https://github.com/expressjs/cors并在快递应用中使用它们:

var Product = require('../models/product');
var express = require('express');
var cors = require('cors');
var app = express();
var router = express.Router();

app.use(cors());    

router.route('/products')


    .get(function(req, res) {


      Product.find(function(err, products) {
        if (err) {
          return res.send(err);
        }

        res.json(products);
        });


    })

    .post(function(req, res) {


      console.log(req.body);

      var product = new Product(req.body);


      product.save(function(err) {
        if (err) {
          return res.send(err);
        }

        res.send({ message: 'product Added' });
      });
    });