如何从 Nodejs 中的 post 请求中获取正文

How to get body from a post request in Nodejs?

本文关键字:请求 获取 正文 post 中的 Nodejs      更新时间:2023-09-26

我正在使用post方法将数据id发送到我的节点服务器。但是req.body在我的节点文件中未定义

我的索引.html如下所示:

<html ng-app="IMDBApp">
<body>
    <div ng-controller="testController as movieFetcher" class="container">
        <input type="text" ng-model="movieFetcher.movieId"></input>
        <button ng-click="movieFetcher.sendId(movieFetcher.movieId)">Fetch Details</button>
    </div>
</body>

我的角度控制器看起来像这样:

angular.module('testApp', []).controller('testController',['$http',function($http){
this.movieId = 197;
this.sendId = function(id){
    $http.post('/test',id).success(function(response){
     // does something on response
    });
}; }]);

我的节点服务器看起来像:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.text());
app.listen(8080);

app.post('/test', function(req, res) {
 var i = req.body;
 var url = 'http://www.imdb.com/title/tt' + i + '/';
 // i shows as undefined
 console.log("i is",i,"url is",url);
 res.send(url);
});

默认情况下$http.post发送的内容类型为application/json,因为您使用的是text/plain因此您需要显式发送内容类型text/plain

$http({
  method: 'POST',
  url: '/test',
  headers: {
    'Content-Type': 'text/plain'
  },
  data: id
})

$http Docs设置 HTTP 标头

$http服务将自动向所有请求添加某些 HTTP 标头。可以通过访问 $httpProvider.defaults.headers 配置对象来完全配置这些默认值,该对象当前包含以下默认配置:

  • $httpProvider.defaults.headers.common (headers that are common for all requests): Accept: application/json, text/plain, * / *

  • $httpProvider.defaults.headers.post: (header defaults for POST requests) Content-Type: application/json

  • $httpProvider.defaults.headers.put (header defaults for PUT requests) Content-Type: application/json

将您的server.js更新为

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + '/public'));

而不是

app.use(express.static(__dirname + '/public'));
app.use(bodyParser.text());

那你应该没事了。

将传入的 JSON 转换为字符串, var 体 = ''; req.on('data', function (data) { 正文 += 数据; }); req.on('end', function () { var params = JSON.parse(body); 回调函数 回调; });

然后像 body.id 一样读取数据