如何提取正文请求 node.js

Posted

技术标签:

【中文标题】如何提取正文请求 node.js【英文标题】:How to Extract body request 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"
    

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

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

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

谢谢大家!!

【问题讨论】:

首先,最好每次做一个问题。二、到底是什么问题? 我正在尝试发送邮递员请求 (POST),然后在节点中我尝试获取我发送的正文请求 1.您需要bodyparser 来获取数据。 2. 密码可以明文发送。 好的..我会看看bodyparser的东西..这是我需要的东西(它是一个模块)吗?如何包含它? 是的,它是一个模块,不,它不是必需的,您可以编写自己的代码,但如果您希望数据自动填充到 req.body,它是必需的。 【参考方案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'并且网址是正确的..但是,我不知道正文样式是否正确..我应该在“原始”上选择“表单数据”吗

以上是关于如何提取正文请求 node.js的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python 请求调用中提取 HTTP 响应正文?

如何提取正文请求 node.js

macOS 中如何安装 Node.js

vue.js2.0:如何搭建开发环境及构建项目

ACM模式下JavaScript(js)的输入输出 V8 Node

Node.js 入门