Мы знаем, что протокол HTTP — это спецификация прикладного уровня, основанная на протоколе TCP/IP, который передается в коде ASCII. Спецификация делит HTTP-запрос на три части: строку состояния, заголовок запроса и тело сообщения. Что-то вроде этого:
<method> <request-url> <version>
<headers>
<entity-body></entity-body></headers></version></request-url></method>
Протокол предусматривает, что данные, отправленные POST, должны быть помещены в тело сообщения (entity-body), но протокол не определяет, какую кодировку должны использовать данные. На самом деле разработчик может полностью определить формат тела сообщения, если окончательный HTTP-запрос соответствует указанному выше формату.
Однако когда данные отправляются, это имеет смысл только в том случае, если сервер успешно их анализирует. Обычные серверы, такие как Node.js, php, python, java и т. д., а также их фреймворки имеют встроенные функции для автоматического анализа распространенных форматов данных. Сервер обычно узнает, как кодируется тело сообщения в запросе, в соответствии с полем Content-Type в заголовке запроса, а затем анализирует тело. Итак, когда дело доходит до схемы отправки данных POST, она включает две части: Content-Type и кодировку тела сообщения.
Что касается метода отправки данных POST, подробное содержание не будет представлено, см.
Четыре распространенных метода отправки данных POST.
Ладно, переходим к полнометражному фильму >>>
Для платформы Node Express необходимо обработать четыре основных формата:
1.www-форма-urlencoded
По умолчанию используется почтовый запрос http. Обратите внимание, что это метод отправки по умолчанию. Например, если вы пишете
<form>....<input type="submit" /></form>
форма формы, кнопка отправки внутри по умолчанию такаяwww-form-urlencodedпредставленный метод.
Мы используемbody-parserЭтот плагин в порядке, пожалуйста, нажмите на ссылку для конкретного использования.
2. данные формы
Отправка формы по умолчаниюwww-form-urlencoded, но когда вам нужно загрузить файл, вы должныformэтикетка вот такenctype="multipart/form-data".
Для обработки таких форм в Node также требуется одно из следующих промежуточных программ.
Важно отметить, что данные формы трех плагинов могут обрабатываться сами по себе.www-form-urlencoded, так что если вам нужно обрабатывать поля и файлы одновременно, вам не нужно вводить их сноваwww-form-urlencodedсопутствующие плагины.
Три.application/json
bodyParser поддерживает такой анализ параметров.
Примечание. Перед отправкой необходимо указать в заголовке http-запроса значение content-type=application/json.
Четыре.текст/xml
Этот тип запроса не особенно распространен, и body-parse по умолчанию не анализирует этот формат данных, но, поскольку платформа Tencent WeChat в настоящее время использует этот формат обмена данными, она по-прежнему использует множество интерфейсов, связанных с WeChat. в экспресс-формате нет хорошего способа, вы можете использовать код только для его обработки, прочитать параметры тела запроса в виде строки, а затем использовать пакет xml2json для разбора строки в объект json, что намного удобнее использовать.
const express = require('express'),
bodyParser = require('body-parser'),
xml2json=require('xml2json'),
app = express(),
server = require('http').createServer(app);
app.use(bodyParser.urlencoded({
extended: true
}));
app.post('/xml', function (req, res) {
req.rawBody = '';
let json={};
req.setEncoding('utf8');
req.on('data', function(chunk) {
req.rawBody += chunk;
});
req.on('end', function() {
json = xml2json.toJson(req.rawBody);
res.send(JSON.stringify(json));
});
});
const PORT = process.env.PORT || 8002;
server.listen(PORT);
Второй способ — использовать промежуточное ПО для WeChat,wechat-parser .
Последнее рекомендуется.