13

I'm new to node.js and I'm trying to write a program that receives http requests and forwards the contents through a socket. At the other end of the socket is a paging system that needs messages terminated with a new line character. So far, it works fine, except there is an extra message sent with the contents: undefined.

When I print the contents of the pager message to the client's browser, there does not appear to be a new line. Am I doing this right?

sys = require("sys"),
http = require("http"),
url = require("url"),
path = require("path"),
net = require("net");

socket = new net.Socket();
socket.connect(4000, '192.168.0.105');

var httpServer = http.createServer(function(request, response) {
    var uri = String(url.parse(request.url).query);
    var message = uri.split("=");
    var page = 'FPG,101,0,3!A' + message[0] + '\n';
    response.writeHead(200, {"Content-Type":"text/html"});
    response.write('sending message: ' + page + " to pager");
    response.end();
    socket.write(page);
}).listen(8080);

sys.puts("Server running at http://localhost:8080/");

EDIT: I narrowed it down further. It turns out that if I do:

var page = 'FPG,101,0,3!A' + 'hello' + '\n';

It works okay. So the output of uri.split("=") must not be what I am expecting.

Dan D.
  • 73,243
  • 15
  • 104
  • 123
David
  • 207
  • 2
  • 3
  • 9
  • If you watch the traffic with [Wireshark](http://en.wikipedia.org/wiki/Wireshark), do you see trailing newlines? Do you need to send `\r\n` instead of just `\n`? – sarnold May 04 '12 at 00:23
  • No, I got this working in another application by just sending \n, so I know that's all I need. – David May 04 '12 at 00:25

5 Answers5

17

I'm sure the new line is there, but you aren't going to see it when you send your Content-Type as text/html. In HTML, \n is just other whitespace, and is treated as such. Use text/plain instead.

Brad
  • 159,648
  • 54
  • 349
  • 530
  • Oh. Okay, well now I'm seeing it on the client's browser. There must be some other problem. Thanks. – David May 04 '12 at 00:23
  • @ddor254 CSS controls how the whitespace is interpreted. Did you have a specific question? – Brad Aug 20 '18 at 16:41
  • yeah , i mean where it is written in the HTML spec that CSS control the representation of the html? and why css is set as interpreter only when the `content-type` in `text/html` ? – ddor254 Aug 21 '18 at 08:18
11

Since content type is 'text/html',we can happily use break statement.Just like this

res.write('hello'+'<br/>');
 res.write('nice to meet you');

You can try this code in node:

var http = require('http');

http.createServer(function (req, res) {

res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('hello,this is saikiran'+'<br/>');
res.end('nice to meet you');

}).listen(process.env.PORT || 8080);
console.log('server running on port 8080');
Raphael Rafatpanah
  • 19,082
  • 25
  • 92
  • 158
saikiran kokku
  • 111
  • 1
  • 4
0

As per content type of text/plain, you can also use \r to send a return input to the client's browser

Amado Saladino
  • 2,114
  • 23
  • 25
-3

I figured out what the problem was. For some reason the browser was sending an additional request to the page right after my request. I just filtered for requests with a certain format and that fixed it.

David
  • 207
  • 2
  • 3
  • 9
-4

Consider using \\n instead of \n for new line.

karthikr
  • 97,368
  • 26
  • 197
  • 188