Node.js http parse error

今天碰到一个奇怪的错误.

events.js:72
        throw er; // Unhandled ‘error‘ event
              ^
Error: Parse Error
    at Socket.socketOnData (http.js:1583:20)
    at TCP.onread (net.js:527:27)

代码如下:

一个简单的http服务器

var http = require(‘http‘);

var server = http.createServer();

server.listen(3000);

server.on(‘request‘, function(req, res){
    res.writeHead(‘Content-Type‘, ‘text/html‘);
    res.end(‘hello world‘);
});

一段请求服务器的代码

var http = require(‘http‘);

var req = http.request(‘http://localhost:3000‘);

req.on(‘response‘, function(res){
    res.setEncoding(‘utf8‘)
    res.on(‘data‘, function(data){
        console.log(data);
    })
})

req.end();

问题出在这一行代码

res.writeHead(‘Content-Type‘, ‘text/html‘);

正确的写法是

res.writeHead(200, {‘Content-Type‘: ‘text/html‘});

如果服务器端写入了错误的header, 客户端就不能正确解析, 报的错误就是"Parse Error".

Node.js文档是这么解释req对象的error事件的

If any error is encountered during the request (be that with DNS resolution, TCP level errors, or actual HTTP parse errors) an ‘error‘ event is emitted on the returned request object.

如果Node.js的http module不能解析HTTP response, 一个error事件会被触发, 这就是为什么错误信息中有"Unhandled ‘error‘ event".

在查这个bug过程中, 一个困惑我的地方是, 我写的http请求代码会出错, 但是用浏览器打开http://localhost:3000却没问题. 当你写错了代码, 程序却正常运行了, 这样的bug最坑了.

时间: 2024-10-14 21:00:33

Node.js http parse error的相关文章

Node.js笔记(三)路由和socket.io

本文参考了<Node应用程序构建--使用MongoDB和backbone>的第二章 -------------------------------- 路由 依赖于ConnectHTTP服务器框架,Express提供了视图渲染和一种描述路由的语言 要使用express,首先要安装express,安装过程不再描述, 看下面一段示例代码: var express = require('express'); var app = express(); app.get('/stooges/:name?',

解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)

2014-08-23 今天开始学习Node.js,在写一个文件上传的功能时候,调用fs.renameSync方法错误 出错代码所在如下: 1 function upload(response,request){ 2 console.log("upload called"); 3 var form = new formidable.IncomingForm(); 4 console.log("about to parse"); 5 form.parse(request

nodejs报错roll back,because of a error.node.js setup wizard ended prematurel

win7(我用的是笔记本)在nodejs官方网站下载.msi文件安装,安装到一半的时候,进度条提示:roll back,because of a error.node.js setup wizard ended prematurely. 最后手动安装下exe载包和配置环境变量. 这篇文章里面说到要自己编译npm (http://blog.csdn.net/yczz/article/details/6938260) 我在执行node cli.js install npm -gf的时候老报错 npm

node.js中的url.parse方法使用说明

node.js中的url.parse方法使用说明 *方法说明:* 讲一个URL字符串转换成对象并返回 代码如下: url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) 接收参数: urlStr                                       url字符串 parseQueryString                   为true时将使用查询模块分析查询字符串,默认为false slashesDeno

解决最近windows版本Node.js中npm出现的“Error: ENOENT, stat &#39;C:\Users\UserName\AppData\Roaming\npm”的问题

(转载请注明出处,from www.cnblogs.com/xdxer) 问题可能如下所示 解决方案: 在 'C:\Users\UserName\AppData\Roaming\‘ 下手动的增加一个文件夹npm . 然后问题就解决了. 解决最近windows版本Node.js中npm出现的"Error: ENOENT, stat 'C:\Users\UserName\AppData\Roaming\npm"的问题

nodejs安装错误Node.js configure error: No acceptable C compiler found!解决

Node.js configure error: No acceptable C compiler found! Please make sure you have a C compiler installed on your system and/or consider adjusting the CC environment variable if you installed it in a non-standard prefix. 检查两点: 1.你是否有C编译工具被安装在你的系统中,gc

node.js搭建代理服务器请求数据

1.引入node.js中的模块 1 var http = require("http"); 2 var url = require("url"); 3 var qs = require("querystring"); 2.创建服务器 //用node中的http创建服务器 并传入两个形参 http.createServer(function(req , res) { //设置请求头 允许所有域名访问 解决跨域 res.setHeader("

Node.JS 文件读写,把Sheet图集转换为龙骨动画图集

Node.JS 文件读写,把Sheet图集数据转换为龙骨动画图集数据 var fs = require("fs") var readline = require("readline"); var rl = readline.createInterface({ input:process.stdin, output:process.stdout }); var path = undefined; var dbName = undefined; rl.question(

Node.js的Formidable模块的使用

今天总结了下Node.js的Formidable模块的使用,下面做一些简要的说明. 1)     创建Formidable.IncomingForm对象 var form = new formidable.IncomingForm() 2)     form.encoding = 'utf-8' 设置表单域的编码 3)     form.uploadDir = "/my/dir"; 设置上传文件存放的文件夹,默认为系统的临时文件夹,可以使用fs.rename()来改变上传文件的存放位置