【问题标题】:How to Extract body request node.js如何提取正文请求 node.js
【发布时间】:2017-02-23 06:56:03
【问题描述】:

我刚刚开始学习 node.js (Express),我创建了一个与非常简单的 mongo 数据库通信的简单应用程序。我在名为“testDB”的数据库中有一个名为“用户”的集合。我在我的 node.js 应用程序中创建了我的骨架,并遵循了“关注点分离”的逻辑。

在我的控制器文件夹中,我有一个名为 usersController 的子文件夹。在该子文件夹中,有 2 个 .js 文件,一个是 usersControllers.js,另一个是 usersRoutes.js

在 usersRoutes.js 里面有如下代码:

    "use strict";
    var express = require('express');
    var router = express.Router();

    // require the controller here
    var usersController = require("./usersController.js")();


    router
        .get('/', usersController.getAllUsers)
        .post('/', usersController.createUser);

    module.exports = router;

如您所见,我正在调用 usersController.js 中名为“createUser”的函数(工厂)。这个函数的写法如下:

"use strict";

var MongoClient = require('mongodb').MongoClient;

var usersController = function(){
    var getAllUsers = function(req, res){
        MongoClient.connect('mongodb://localhost/testDB', function(err, db){
            if(err){
                throw err;
            }
            db.collection('Users').find().toArray(function(err, doc){
                if(err){
                    throw err;
                }
                else{
                    return res.status(200).json(doc);
                    db.close();
                }
            });

        });
    };

    var createUser = function (req, res) {
        MongoClient.connect('mongodb://localhost/testDB', function(err, db){

            console.log(req.body);
            db.close();
        });
    };

    return {
        getAllUsers: getAllUsers,
        createUser: createUser
    };
};
module.exports = usersController;

我创建了一个邮递员请求来探索如何提取我发送的正文数据。请求如下

在标题中我有 2 个键

  • 接受:application/json;charset=UTF-8
  • 内容类型:应用程序/json

在正文中,我有以下原始文本:

{
    "Users": {
        "First Name": "Ahmed",
        "Last Name": "Rahim",
        "Username": "rahima1",
        "Passwoed": "secure"
    }
}

基于前面的场景,我有几个问题:

  1. 如何从请求中提取正文。我试图深入研究'req' 但我找不到我要找的东西?
  2. 传递这样的普通密码并不好,对吧?任何 建议传递加密密码(可能是 sha)?
  3. 请求本身有问题吗?

任何旁注都会从像你们这样的专家那里得到很多帮助:)

谢谢大家!!

【问题讨论】:

  • 首先,最好每次做一个问题。二、到底是什么问题?
  • 我正在尝试发送邮递员请求 (POST),然后在节点中我尝试获取我发送的正文请求
  • 1.您需要bodyparser 来获取数据。 2. 密码可以明文发送。
  • 好的..我会看看bodyparser的东西..这是我需要的东西(它是一个模块)吗?如何包含它?
  • 是的,它是一个模块,不,它不是必需的,您可以编写自己的代码,但如果您希望数据自动填充到 req.body,它是必需的。

标签: javascript json node.js mongodb postman


【解决方案1】:

需要导入并要求body-parser

npm install body-parser

var bodyParser = require('body-parser');
...
app.use(bodyParser.json());

【讨论】:

    【解决方案2】:

    我阅读了 cmets 等,发现您还没有找到解决方案。

    我似乎无法真正找到您的实际错误,但想提供一些代码示例,可能会帮助您自己找到它。

    顺便说一句,在您发送的对象中,我不会用大写“U”写“用户”,而只是“用户”。

    假设我们有这个路由器文件,它可能是您的 createUser。它应该看起来像这样:

    router.post('createUser', function (req, res) {
      var users = req.body.users;
      res.json(users);
    });
    

    这应该发送您发送的内容 :-) 在开始与数据库通信之前尝试执行此操作。这样您就可以轻松地确认您发送的内容就是服务器接收的内容。希望对您有所帮助,如果您还有其他问题,我很乐意为您提供帮助。

    【讨论】:

      【解决方案3】:

      如何从请求中提取正文。我试图深入研究“req”,但找不到我要找的东西?

      这应该通过简单的req.body 来完成。来自express docs 上的req.body: "包含在请求正文中提交的数据键值对。默认情况下未定义,当您使用body-parser和multer等body-parser中间件时填充。"

      像这样传递一个简单的密码是不好的,对吧?有什么建议可以传递加密密码(也许是 sha)?

      This answer 总结得很好。如果您想可靠地加密密码提交,您需要使用 https。

      【讨论】:

      • 我试过 req.body 但它给了我 undefined .. 这就是我决定发布这个问题的原因:)
      • 啊,我看到您正在使用 req.body ... 猜我忽略了这一点。结果是不确定的吗?我不确定你的问题是什么。
      • 是的 .. 当我调用 req.body .. 它会因为某种原因给我“未定义”:(
      • 是的,对不起,那是我的错。我的猜测是你提出的请求有问题。可能您没有发送 POST 请求?如果请求是正确的,那基本上应该可以神奇地工作。
      • 那是真的..它应该可以工作..我确保我的请求类型是'POST'并且网址是正确的..但是,我不知道正文样式是否正确..我应该在“原始”上选择“表单数据”吗
      猜你喜欢
      • 2019-08-10
      • 2015-09-09
      • 1970-01-01
      • 2019-10-25
      • 2016-04-24
      • 2019-02-17
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多