【问题标题】:Express returns an empty req.body to a Postman requestExpress 向 Postman 请求返回一个空的 req.body
【发布时间】:2021-07-23 00:20:21
【问题描述】:

我正在尝试设置一个简单的 CRUD 应用。我已经在 express 中设置了 DELETE 路线,我正在尝试使用 Postman 打它。

当我在请求中记录 req.body 时,我得到一个空对象。

路线:

var router = express.Router();

if (process.env.NODE_ENV !== 'production') {
    require('dotenv').config();
};

username = process.env.MONGODB_USERNAME;
password = process.env.MONGODB_PASSWORD;

const MongoClient = require('mongodb').MongoClient;
const connectionString = `mongodb://${username}:${password}@localhost:27017`

/* DELETE post delete. */
router.delete('/', (req, res) => {
    const postId = req.body.postId;
    console.log(req.body);
    console.log(postId);
    MongoClient.connect(connectionString, {useUnifiedTopology: true})
    .then(client => {
        console.log("Delete request to database!");
        const db = client.db("blog");
        const postsCollection = db.collection('blogPosts');
        postsCollection.findOneAndDelete({"_id": postId})
        .then(deletedDocument => {
            if(deletedDocument) {
              console.log(`Successfully deleted document that had the form: ${deletedDocument}.`)
              res.send(`Successfully deleted document that had the form: ${deletedDocument}.`);
            } else {
              console.log("No document matches the provided query.")
              res.send("No document matches the provided query.");
            }
            return deletedDocument
          })
          .catch(err => console.error(`Failed to find and delete document: ${err}`));
    })
    .catch(error => console.error(error));
});

module.exports = router;

邮递员请求:

Express app.js:

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var postRequestRouter = require('./routes/postrequest');
// var adminRouter = require('./routes/admin');
var postDeleteRouter = require('./routes/postdelete');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/postrequest', postRequestRouter);
// app.use('/admin', adminRouter);
app.use('/postdelete', postDeleteRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

生成的控制台日志:

{}
undefined
Delete request to database!
Successfully deleted document that had the form: [object Object].
DELETE /postdelete 200 43.848 ms - 7

我知道对 MongoDB 本身的请求可能会失败,因为它的格式不正确,但现在我只是想了解为什么 req.body 为空。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript node.js mongodb express postman


    【解决方案1】:

    发布此问题后不久,我将其链接到编程 Discord。一位名为“nnari”的用户很快就发现了问题所在。

    原来我只需要将 Postman 中的下拉菜单从“Text”更改为“Json”。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 2017-08-30
      • 2021-03-08
      • 2023-03-11
      • 2021-05-05
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多