Протоколы экспресс-узла JS + HTTP: отправка изображения поверх запроса / ответа - PullRequest
0 голосов
/ 28 августа 2018

Мне нужна помощь: Я использую экспресс в узле JS и пытаюсь передать изображение через HTTP-запрос и / или ответ

Экспресс-инициализация:

var app = express();
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.text({type:'text/plain'}));

Http-запрос (ajax внутри index.html):

var request = new XMLHttpRequest();
request.open('GET', '/request');
request.setRequestHeader('Content-Type', 'text/plain');
request.onreadystatechange = function() {
    if(request.readyState == 4){
        //do stuff with request.responseText
    }
};
request.send('request for image xxxx');

Экспресс-обработка запроса:

app.get('/request', (req, res) => {
    if(req.body == 'request for image xxxx')
        res.status(200).send(???);
    //other stuff
});

Мое промежуточное ПО 'bodyParser' поддерживает другие типы данных, если они закодированы в URL, но я понятия не имею, как это сделать, поэтому я вынужден использовать только текстовые / простые сообщения, кроме случаев, когда возникает проблема когда я хочу отправить изображение более.

Полагаю, я мог бы, вероятно, сделать это, используя буферы, но я абсолютно не представляю, какой будет синтаксис для этого, и синтаксис обработки HTTP, который я уже использую, вероятно, чрезмерно сложен или что-то в этом роде. Я совершенно новичок в протоколах HTTP.

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете закодировать изображение в base64 и отправить его в виде текста. При получении на сервере напишите это как изображение.

var base64Data = 'base64encoded'
require("fs").writeFile("image.png", base64Data, 'base64', function(err) {
    console.log(err);
});
...