Не удается найти данные, отправленные с помощью Ajax в объекте запроса (Nodejs) - PullRequest
0 голосов
/ 13 апреля 2020

Я отправляю объект данных как в коде;

var xhttp = new XMLHttpRequest();
var dataset;

function data () {

    dataset = {
        "name" : document.getElementsByName("name")[0].value,
        "pass" : document.getElementsByName("pass")[0].value,
        "email" : document.getElementsByName("email")[0].value,
        "birthday" : document.getElementsByName("birthday")[0].value,
        "agree" : false
    }

    if(document.getElementById("signupcheck").className.search("active") > -1) dataset.agree = true
    xhttp.open("POST", "/example", true);
    xhttp.send(dataset);
}

И я пытаюсь получить эти данные в NodeJs как в коде;

var express = require("express");
var app = express();
var router = express.Router();

app.use(express.static('public'));

app.get("/",function(req,res){
    res.sendFile(__dirname + "/index.html");
    console.log(__dirname);
})

app.post("/example", function(req,res) {
  console.log(req.body)
})

var server = app.listen(8000,function(){

})

Ajax работает, потому что я вижу объект req на консоли, когда я инициализирую функцию. Но объект req настолько велик, что не помещается в терминал.

enter image description here

Я не могу найти отправляемые данные. Как я могу получить данные?

1 Ответ

1 голос
/ 13 апреля 2020

Так что я думаю, что проблема с вашим запросом.

После локального запуска я получаю:

TypeError [ERR_INVALID_ARG_TYPE]: The "string" argument must be of type string or an instance of Buffer or ArrayBuffer. Received an instance of Object

После просмотра документации это подтверждает https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send

Не могли бы вы попробовать это?

xhttp.send(JSON.stringify({dataset: dataset}))

или вы можете обновить объект набора данных до

const dataset = {
    dataset: {
        name: document.getElementsByName('name')[0].value,
        pass: document.getElementsByName('pass')[0].value,
        email: document.getElementsByName('email')[0].value,
        birthday: document.getElementsByName('birthday')[0].value,
        agree: false,
    },
}

и сохранить

xhttp.send(dataset)

Добавить промежуточное ПО express json, чтобы вы можете получить доступ к телу.

const express = require('express')

const app = express()
const router = express.Router()

app.use(express.json())
console.log(req.body.dataset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...