Próbuję nauczyć nodejs i pomyślałem, że najlepszym sposobem, aby to zrobić byłoby spróbować jakiejś rzeczy bez użycia żadnych wyraźnych lub inne moduły non-core. Utknąłem, próbując uzyskać jednocześnie tekst i obraz. Kod Próbuję to:Nodejs: Jak powrócić różne typy zawartości z tej samej odpowiedzi (tekst i obraz)?
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, file) {
response.writeHead(200, {'content-type':'text/html'});
response.write('<p>hi there!</p>');
response.writeHead(200, {'content-type':'image/jpg'});
response.write(file, 'image');
response.end();
});
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port ' + port);
});
więc doskonale, co powinno być dostarczane jest:
<html>
<body>
<p>hi there</p>
<img src='my_pic.jpg'/>
</body>
</html>
Ale zamiast tego, nic się nie pojawia.
Próbowałem wstawić response.end() po napisaniu 'hi there', który wyświetla tekst, a potem spróbowałem zamienić miejscami tekst i obraz (w tym nagłówki), które wyświetlały obrazek, ale ja nie potrafię obliczyć, jak wyświetlić oba jednocześnie, jak na prawdziwej stronie internetowej.
Czy możesz wyjaśnić, jak go o wprowadzenie różnych rodzajów treści na tej samej stronie - oni muszą być w różnych odpowiedziach? Coś natknąłem się na kolejne pytanie:
nodejs - How to read and output jpg image?
coś takiego wygląda rozwiązania, ale nie mogę dowiedzieć się, jak zastosować to do mojej sytuacji (nie mam dużego doświadczenia w po stronie serwera rzeczy)
Dziękujemy
EDIT:. dostał pracę od odpowiedzi user568109 za:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, file) {
var imagedata = new Buffer(file).toString('base64');
response.writeHead(200, {'content-type':'text/html'});
response.write("hi there!<img src='data:my_pic.jpg;base64,"+imagedata+"'/>");
response.end();
});
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port' + port);
});
Wydaje się to dużo pracy z osadzania obrazów chociaż - gdybym chciał umieścić więcej niż jeden obraz w, będę musiał po prostu zachować gniazdowania tych FILESTREAM wywołania zwrotne?
Próbowałem też to w ten sposób, ale to nie działa:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
response.writeHead(200, {'content-type':'text/html'});
response.write("hi there!<img src='my_pic.jpg'/>");
response.end();
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port' + port);
});
nie byłem pewien, czy to, co ludzie na myśli linię
response.write('<img src="my_pic.jpg"/>')
, ponieważ serwer nie robi Wygląda na to, że w moim imieniu prosi o kolejną prośbę o pobranie obrazu? Po prostu pokazuje zepsuty obraz ikony.
Wygląda na to, że próbujesz wtłoczyć 2 żądania HTTP w jedną odpowiedź. Naprawdę powinieneś po prostu napisać 'response.write ('');', a następnie przeglądarka najpierw pobierze kod HTML, a następnie wyśle osobną prośbę o pobranie my_pic.jpg – codefactor
Wygląda na to, że chcesz wysłać odpowiedź wieloczęściową - jak dziwne . Nie wiem, czy jakakolwiek przeglądarka poradzi sobie z tym. Odpowiedź musi być przeanalizowana po stronie klienta, jak sądzę. – MaxArt
możliwy duplikat [Zbuduj wieloczęściową odpowiedź http przy użyciu pliku node.js] (http://stackoverflow.com/questions/11494209/construct-multi-part-http-response-using-node-js) – maerics