Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   post параметры. (https://javascript.ru/forum/node-js-io-js/83545-post-parametry.html)

fxobject 08.01.2022 18:54

post параметры.
 
Господа, ну как то с разбегу и об стену....
Получаю http запрос, нужно вытащить post параметры. Как бы не сложно. Много примеров....
ну вот как то так:

const qs = require('querystring');
http.createServer( function(request,response){
.......
if(request.method ==="POST"){
request.on('data', function (data) { body += data.toString(); });

request.on('end', function () {
console.log(qs.parse(body));
});
...........................
в результате в body получаем:

------------------------------7db738db57ad
Content-Disposition: form-data; name="key"

popandos
------------------------------7db738db57ad
Content-Disposition: form-data; name="key1"

popandos1

и после parse оно же и остается.... (
что это за данные - писать не нужно - понятно. вопрос почему не парсит.
Руками самостоятельно распарсить - без проблем, но блин почему не парсит? есть какой то другой вариант или самому писать?
express и подобное не предлагать
С наступившим всех )))
Спасибо

ksa 08.01.2022 19:52

Цитата:

Сообщение от fxobject
но блин почему не парсит?

Бивас, тест! (с)

Сделал такую страничку...
<!DOCTYPE html>
<html>
<head>
<!--
<script src='https://code.jquery.com/jquery-latest.min.js'></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
<script src='tmp.js'></script>
-->
<style>
</style>
<script>
</script>
</head>
<body>
<form method='post' action='http://localhost:3000'>
	<input name='test' type='text' />
	<input name='test' type='text' />
	<button>Send</button>
</form>
</body>
</html>

Такой сервер...
const http = require('http');
const url = require('url');
const { parse } = require('querystring');

http.createServer((request, response) => {
    console.log('server work');
    if (request.method == 'GET') {
        // GET -> получить обработать
        console.log(request.method); // !!!!
        let urlRequest = url.parse(request.url, true);
        // console.log(urlRequest);
        console.log(urlRequest.query.test); // ! GET Params
        if (urlRequest.query.test % 2 == 0) {
            response.end('even');
        }
        response.end('odd');
    }
    else {
        // POST
        let body = '';
        request.on('data', chunk => {
            body += chunk.toString();
        });
        request.on('end', () => {
            console.log('body', body);
            let params = parse(body);
            console.log('params', params);
            console.log('params.test', params.test);
            response.end('ok');
        });
    }

}).listen(3000);

https://www.itgid.info/unit/nodejs?unit=nodejs-8

Вот результат работы
server work
body test=12345&test=asdf
params [Object: null prototype] { test: [ '12345', 'asdf' ] }
params.test [ '12345', 'asdf' ]

Как по мне - все парсит. :-?

fxobject 08.01.2022 20:51

О да, свершилось чудо. засунул в post какую то фигню, ну и еще хуже получил на выходе. действительно работает... ну так нихто ж не сомневался )

Aetae 08.01.2022 22:22

fxobject, у тебя пост запрос приходит как multipart/form-data а читать ты пытаешься как application/x-www-form-urlencoded.


Часовой пояс GMT +3, время: 03:36.