NodeJs JSON帖子请求正文未解析

时间:2019-06-23 09:11:59

标签: javascript node.js

我试图在nodeJS中创建一个简单的API,但是在尝试发布一些数据时遇到了麻烦。

这是我的app.js文件:

const express = require('express');
const feedRoutes = require('./routes/feed');

const app = express();

app.use(express.json());

app.use('/feed', feedRoutes)

app.listen(8080)

这是我的feed.js路由文件:

const express = require('express');
const router = express.Router();

const feedController = require('../controllers/feed');

// GET /feed/posts
router.get('/posts', feedController.getPosts);

// POST /feed/posts
router.post('/post', feedController.createPosts)

module.exports = router

这是我的控制器feed.js:

exports.getPosts = (req, res, next) => {
  res.status(200).json({
    posts: [
      {
        title: 'First post',
        content: 'My awesome text',
      }
    ]
  })
}

exports.createPosts = (req, res, next) => {
  const {
    title,
    content,
  } = req.body

  //Create in db later

  res.status(201).json({
    post: {
      id: '1',
      title: title,
      content: content,
    },
    metadata: {
      message: 'Post was created',
    },
  })
}

根据我对node.js的了解,您需要一个正文解析器。因为我使用的是Express 4.16,所以我认为我可以用这个亚麻布解决它 app.use(express.json());

但是看起来像这样:

__lookupSetter__:function __lookupSetter__() { … }
constructor:function Object() { … }
hasOwnProperty:function hasOwnProperty() { … }
isPrototypeOf:function isPrototypeOf() { … }
propertyIsEnumerable:function propertyIsEnumerable() { … }
toLocaleString:function toLocaleString() { … }
toString:function toString() { … }
valueOf:function valueOf() { … }
__proto__:null

有人知道为什么我无法获得标题和内容吗?

我使用邮递员通过localhost:8080/feed/post上的post方法发出请求 在原始数据部分中使用此

{
    "title": "Look A POST!",
    "content": "Meh"
}

您可以在此处找到完整的代码:https://github.com/Skillvendor/node-js-api

编辑1: 这是我在响应中看到的:

req.body
Object {}
__proto__:Object {constructor: , __defineGetter__: , __defineSetter__: , …}

req.body.title
undefined

我修复了Postman json,仍然持续存在错误

Edit2

启用corse后(由于邮递员不在浏览器中,因此您似乎被认为是CORS问题,尽管您看不到该错误) 添加这个解决了它:

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET, POST, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    next();
});

1 个答案:

答案 0 :(得分:-1)

您需要使用bodyParser中间件。请看看this