标签: body-parser

req.body在服务器端未定义

我正在研究在服务器端使用node,express,mysql的 app .我已经在server.js文件上写了几个API,当我试图使用Postman访问那些时,req.body总是未定义的.

这是我的server.js配置.

var express = require('express');
var mysql = require('mysql');
var cors = require('cors');
var bodyParser = require('body-parser');
var wrench = require("wrench");
var fs = require('fs');
var path = require("path");
var mkdirp = require('mkdirp');
var walk = require('walk');
var fse = require('fs-extra');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
var crypto = require('crypto');

app.use(cors());

app.use(bodyParser.urlencoded({limit: '50mb',extended: false}));
app.use(bodyParser.json({limit: '50mb'}));

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'pass',
    database: 'dbname'
});


connection.connect(function(err) { …
Run Code Online (Sandbox Code Playgroud)

node.js express body-parser

6
推荐指数
1
解决办法
920
查看次数

如何知道按下了哪个按钮?

我正在学习node.js和表达框架的基础知识.我有一个带有两个按钮的简单页面:

<form action="/home2" method="post">
    <button name="butt1">butt1</button>
    <button name="butt2">butt2</button>
</form>
Run Code Online (Sandbox Code Playgroud)

我想在控制台中看到按下了哪个按钮:

router.post('/', function(req, res, next) {
    console.log(req.body.name);
    res.render('home2', { title: 'post' });
});
Run Code Online (Sandbox Code Playgroud)

在我刚刚看到的控制台中

undefined
Run Code Online (Sandbox Code Playgroud)

如何访问按钮的名称?

javascript button node.js express body-parser

6
推荐指数
1
解决办法
1591
查看次数

在ExpressJS中仅接受JSON内容类型的发布或放置请求

我正在使用ExpressJS框架来创建REST API.所有API都应该只接受POST,PUT和PATCH类型的请求方法的JSON请求体.

我正在使用express.bodyParser模块来解析JSON主体.它工作得很好.

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)

如果我的JSON正文中有任何语法错误,我的上一个错误处理程序中间件被完美地调用,我可以自定义响应400 Bad Request.

但是,如果我传递内容类型而不是application/json类似的东西(text/plain,text/xml,application/xml),那么正文解析器模块会在没有错误的情况下解析它,并且在这种情况下不会调用我的错误处理程序中间件.

我的上一个错误处理程序中间件

export default function(error, request, response, next) {
  if(error.name == 'SyntaxError') {
    response.status(400);
    response.json({
      status: 400,
      message: "Bad Request!"
    });
  }
  next();
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在内容类型不是的情况下调用我的最后一个错误处理程序applicaition/json.

node.js express body-parser

6
推荐指数
1
解决办法
5007
查看次数

使用Express处理最佳实践

我正在写一个实现用户管理系统的网站,我想知道我必须考虑哪些关于表单处理的最佳实践.

特别是性能,安全性,SEO和用户体验对我来说非常重要.当我处理它时,我遇到了几个问题,我没有找到一个完整的节点/快速代码片段,在那里我可以找出我以下的所有问题.

使用案例:有人将更新其个人资料的生日.现在我正在对同一个URL执行POST请求以处理该页面上的表单,POST请求将使用302重定向到同一URL进行响应.

关于表单处理的一般问题:

  1. 我应该为表单处理执行POST请求+ 302重定向,还是像AJAX请求那样做其他事情?
  2. 我应该如何处理无效的FORM请求(例如,无效登录或电子邮件地址已在注册期间使用)?

表达有关表单处理的具体问题:

  1. 我假设在将任何内容插入我的数据库之前,我需要清理并验证服务器端的所有表单字段.你会怎么做?

  2. 我读了一些关于CSRF的事情,但我从未实施过CSRF保护.我也很高兴在代码片段中看到它

  3. 使用Express处理表单时是否需要处理任何其他可能的漏洞?

示例HTML/Pug:

form#profile(method='POST', action='/settings/profile')
    input#profile-real-name.validate(type='text', name='profileRealName', value=profile.name)
    label(for='profile-real-name') Name

    textarea#profile-bio.materialize-textarea(placeholder='Tell a little about yourself', name='profileBio')
        | #{profile.bio}
    label(for='profile-bio') About

    input#profile-url.validate(type='url', name='profileUrl', value=profile.bio)
    label(for='profile-url') URL

    input#profile-location.validate(type='text', name='profileLocation', value=profile.location)
    label(for='profile-location') Location

    .form-action-buttons.right-align
        a.btn.grey(href='' onclick='resetForm()') Reset
        button.btn.waves-effect.waves-light(type='submit')
Run Code Online (Sandbox Code Playgroud)

路由处理程序示例:

router.get('/settings/profile', isLoggedIn, profile)
router.post('/settings/profile', isLoggedIn, updateProfile)

function profile(req, res) {
    res.render('user/profile', { title: 'Profile', profile: req.user.profile })
}

function updateProfile(req, res) {
    var userId = req.user._id
    var form = req.body
    var profile = { …
Run Code Online (Sandbox Code Playgroud)

security node.js express body-parser

6
推荐指数
1
解决办法
976
查看次数

使用 body-parser 和 Express 从请求中读取 png 图像

我使用邮递员向我的服务器发送以下请求:

在此输入图像描述

我尝试使用以下代码访问应用程序中的图像:

应用程序.js

var express = require('express');
var bodyParser = require('body-parser');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

app.use(bodyParser.raw({
  type: 'image/png',
  limit: '10mb'
}));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

index.js(路由器)

var express = require('express');
const router = express.Router();
var Jimp = require('jimp');

/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

router.post('/a', function(req, res) {
  var image = req.body;

  try{
      Jimp.read(image, (err, input) => {
        if (err) …
Run Code Online (Sandbox Code Playgroud)

binary post node.js express body-parser

6
推荐指数
1
解决办法
9408
查看次数

发布表单数据时请求正文为空

我正在向后端使用一个简单的发布请求来获取表单数据,并且由于某种原因,正文始终为空。我试图隔离这个问题,所以我将内容类型更改为应用程序 json,并将数据更改为 json,只有这样我才能发送数据。

客户端:

submitForm(event) {
        event.preventDefault();
        console.log("gggg");
        const data = new FormData(event.target);

         axios.post("http://localhost:4000/user-form-post",data).then(function (response) {
            //handle success
            console.log(response);
        })
        .catch(function (response) {
            //handle error
            console.log(response);
        });
Run Code Online (Sandbox Code Playgroud)

服务器端:

// app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({extended:true}));

app.use(express.urlencoded());

// Parse JSON bodies (as sent by API clients)
app.use(express.json());

app.use(logger('dev'));
app.post('/user-form-post', (req,res) =>{

    console.log("dfdf");
    console.log(req.body); // alwayes print empty dict {}
    res.end();

})
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它需要 jsons(预期行为):

// app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({extended:true}));
Run Code Online (Sandbox Code Playgroud)

与邮差的行为相同。

client backend node.js express body-parser

6
推荐指数
1
解决办法
2万
查看次数

在正文解析器之前编写快速中间件以获取原始请求正文

我编写了一个 Express 中间件来从请求中检索原始正文,并将其设置在正文解析器中间件之前。

我的自定义中间件正在调用req.setEncoding('utf8'),但这会导致以下正文解析器错误:

错误:不应设置流编码

at readStream (/node_modules/body-parser/node_modules/raw-body/index.js:211:17) 
at getRawBody (/node_modules/body-parser/node_modules/raw-body/index.js:106:12)
at read (/node_modules/body-parser/lib/read.js:76:3)
at jsonParser (/node_modules/body-parser/lib/types/json.js:127:5)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

var express = require('express');
var bodyParser = require('body-parser')

function myMiddleware() {
  return function(req, res, next) {
    req.rawBody = '';
    req.setEncoding('utf8');

    req.on('data', function(chunk) {
      req.rawBody += chunk;
    });

    req.on('end', function() {
      next();
    });
  }
}

var app = express();
app.use(myMiddleware());
app.use(bodyParser.json());

var listener = app.listen(3000, function() {
});

app.get('/webhook/', function (req, res) {
  res.sendStatus(200);
});
Run Code Online (Sandbox Code Playgroud)

有没有办法取消编码?是否有另一种方法来检索原始正文,但在它之后仍然使用正文解析器?

node.js body-parser

5
推荐指数
2
解决办法
7749
查看次数

$http.post:大文件不起作用

我正在尝试使用以下代码通过我的网络应用程序上传文件。

看法:

  <form name="uploadForm" class="form-horizontal col-sm-12">
    <div class="col-sm-4">
      <input type="file" ng-model="rsdCtrl.viewData.file" name="file"/>
    </div>
    <div class="col-sm-4">
      <button class="btn btn-success" type="submit" ng-click="uploadFile()">Upload</button>
    </div>
  </form>
Run Code Online (Sandbox Code Playgroud)

控制器:

function uploadFile(){
  if (uploadForm.file.$valid && file) {
    return uploadService.upload(vd.file, "Convictions Calculator", "PCCS").then(function(response){
      /* Some stuff */
    }).catch(handleServiceError);
  }
}
Run Code Online (Sandbox Code Playgroud)

上传服务:

(function (){
'use strict';
angular.module('cica.common').service('uploadService', ['$http', '$routeParams', uploadService]);

function uploadService($http, $routeParams) {

    this.upload = function (file, name, type) {
        const fd = new FormData();
        fd.append('document', file);
        fd.append('jobId', $routeParams.jobId);
        fd.append('documentRename', name);
        fd.append('documentType', type);

        return $http.post('/document/upload', fd, {
            transformRequest: …
Run Code Online (Sandbox Code Playgroud)

node.js express angularjs body-parser ng-file-upload

5
推荐指数
1
解决办法
6892
查看次数

表单 POST 请求正文为空 - Node.js / express / ejs / body-parser

我在使用 Node.js 中的注册表单发布帖子时遇到问题。每次发布表单时,请求的正文都有信息,但正文是空的。我对节点和表达很陌生,所以这可能是小事,但我一生都无法弄清楚。

这是我在 ejs 中的表单:

<form class="form-signin" method="post" action="/users/register">
  <div class="form-group">
    <label class="sr-only" for="email">Email address</label>
    <input type="email" class="form-control" id="email" placeholder="Enter Email" autocomplete="off">
  </div>
  <div class="form-group">
    <label class="sr-only" for="password">Password</label>
    <input type="password" class="form-control" id="password" placeholder="Enter Password">
  </div>
  <div class="form-group">
    <label class="sr-only" for="confirmPassword">Confirm Password</label>
    <input type="password" class="form-control" id="confirmPassword" placeholder="Re-enter Password">
  </div>
  <button class="btn btn-dark mt-3" type="submit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

这是我在用户路由器中的路由器代码:

router.post('/register', function(request, response, next) {
  console.log(request);
  console.log(request.body)
  response.render('register', { 'title': 'Register' });
});
Run Code Online (Sandbox Code Playgroud)

这是控制台上的相关输出:

console.log(request); output shortened this is just the tail.      
  _startAt: [ …
Run Code Online (Sandbox Code Playgroud)

forms ejs node.js express body-parser

5
推荐指数
1
解决办法
4183
查看次数

访问 multer filefilter 中的 request.body

我想做以下事情:当用户上传带有表单字段的文件时,检查表单字段是否为空,如果是,则不上传文件。我正在使用这个代码

fileFilter: (req,file,callback) =>{
     if(req.body.name.trim().length < 1){
         callback(null, false)
     } 
 }
Run Code Online (Sandbox Code Playgroud)

但它给了我未定义的 req.body.name 并且据我所知 fileFilter 将 Express.Request 作为第一个参数,那么为什么我无法访问正文?

完全错误

类型错误:无法读取未定义的属性“trim”

谢谢!

request node.js express multer body-parser

5
推荐指数
1
解决办法
1600
查看次数