如何提取正文请求 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的主要内容,如果未能解决你的问题,请参考以下文章