如何提取body请求node.js

时间:2016-10-14 00:19:50

标签: javascript json node.js mongodb postman

我刚开始学习node.js(Express),我创建了一个简单的应用程序,它与一个非常简单的mongo数据库进行通信。我有一个名为' Users'在名为' 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;

正如您所看到的,我正在调用一个名为&create;' createUser'的usersController.js中的函数(工厂)。此函数的编写如下:

"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;

我创建了一个post man请求,以探索如何提取我发送的正文数据。请求类似于以下

在标题中我有2个键

  • 接受:application / json; charset = UTF-8
  • Content-Type:application / json

在身体中我有以下原始文本:

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

根据之前的情况,我有几个问题:

  1. 如何从请求中提取正文。我试图深入了解“req' 但我无法找到我要找的东西?
  2. 传递这样的普通密码不对,对吗?任何 传递加密密码的建议(也许是沙)?
  3. 请求本身有什么问题吗?
  4. 任何旁注都会帮助我很多像你这样的专家:)

    谢谢大家!!

3 个答案:

答案 0 :(得分:0)

  

如何从请求中提取正文。我试图深入了解“req'但我无法找到我要找的东西?

这应该通过一个简单的req.body来完成。来自req.body上的express docs: "包含请求正文中提交的键值对数据。默认情况下,它是未定义的,并在使用正文解析器和multer等身体解析中间件时填充。"

  传递这样的普通密码并不好,对吗?任何传递加密密码的建议(也许是沙)?

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

答案 1 :(得分:0)

我阅读了评论等,并意识到你还没有找到解决方案。

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

顺便说一句,在你发送的对象中,我不会写#34;用户"资本" U",但只是"用户"。

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

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

这应该发送你发送的内容:-)在开始与数据库交谈之前尝试并执行此操作。这样您就可以轻松确认您发送的内容是服务器收到的内容。希望有任何帮助,否则如果您有其他问题,我很乐意为您提供帮助。

答案 2 :(得分:0)

您需要导入并需要body-parser

npm install body-parser

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