编程语言
首页 > 编程语言> > javascript-使用NodeJS接收JSON

javascript-使用NodeJS接收JSON

作者:互联网

使用Node JS,我试图进行简单的用户注册,将用户名,电子邮件和密码发送到’/ newuser’端点,可以在user.js中看到.
标头已正确发送,并且我可以在控制台中看到它,但是我无法访问我感兴趣的req.body部分.我正在使用body-parser Express中间件,如表达.

如果我打印出req.body,则只打印[object Object],如果我打印出整个req对象,则在任何地方都看不到参数,并且如果我尝试JSON.parse(req.body),则当然是SyntaxError:出现JSON中位置1的意外令牌o.谁能指出我正确的方向?

前端JavaScript

我正在这样做,它应该像这样工作(我也用ajax尝试过,但是它也不起作用,同样的错误).但是我发送的数据绝对正确,如果我在发送之前将其打印出来,则它是有效的JSON.

var xhr = new XMLHttpRequest();
xhr.open('POST', '/newuser');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
  console.log(xhr.responseText);
};
xhr.send(JSON.stringify({
  username: data.username,
  password: data.password,
  email: data.email
}));

server.js

'use strict';

var express = require('express');
var hogan  = require('hogan-express');
var http_module = require('http');
var cors = require('cors');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json('application/json'));

app.use(cors({credentials: true, origin: true}));
app.engine('html', hogan);
app.set('view engine', 'pug');
app.set('views', __dirname + '/views');
app.set('port', process.env.PORT || 4000);
app.use(express.static(__dirname + '/public'));
app.set('trust proxy', 1); // trust first proxy

const partials = {
  header: 'partials/header',
  footer: 'partials/footer'
};

require('./routes')(app, partials);

const http = http_module.Server(app);

http.listen(app.get('port'), () => {
  console.info('Running on http://localhost:%s', app.get('port'));
});

module.exports = app;

routes.js

// Routes
module.exports = (app, partials) => {
  require('./home')(app, partials);
  require('./signup')(app, partials);
  require('./user')(app, partials);
  require('./404')(app, partials);
};

user.js

module.exports = (app, partials) => {
    app.post('/newuser', (req, res, next) => {

        console.log(req.header('Content-Type'))
        console.log(req.body) // this prints [object Object]
        console.log(JSON.parse(req.body)) // this throws SyntaxError: Unexpected token o in JSON at position 1
    });
};

解决方法:

因为您使用了body-parser的json解析器,所以在获取JSON时就已经对其进行了解析(这就是为什么在console.log时看到[object Object]的原因-这是将对象强制转换为字符串时得到的结果)并且没有为它定义任何特殊的toString *).

要访问发送给您的对象的属性,请在req.body上访问它们:

app.post('/newuser', (req, res, next) => {
    console.log(req.header('Content-Type'))
    console.log(req.body.username); // <====
    console.log(req.body.password); // <====
    console.log(req.body.email);    // <====
});

使用该代码,当我在本地运行代码时,我会看到POST数据.

*除非JJJ在下面指出,否则,如果您确实使用console.log,则应该在几乎任何版本的Node中都看到对象的表示形式,而不是[object Object].也许您正在使用其他强制字符串的东西?还是没有使用中间件显示哪个可能用String(req.body)覆盖req.body?

标签:node-js,express,body-parser,javascript
来源: https://codeday.me/bug/20191110/2013963.html