响应:
- 可以自定义设置状态码(状态码范围内的):res.statusCode = 404;
- 修改响应头信息: res.setHeader('content-type','text/html');
- 修改头信息,让页面跳转:res.setHeader('location','http://www.baidu.com'); (注意:状态码要改成302,因为302是重定向)
- 也可以自己在响应头信息中添加一些参数:比如 res.setHeader('age','20');
- 模拟cookie: res.setHeader('set-cookie','name=hh;expires=Thu,28-Aug-2017 18:24:55 GMT;Max-Age=360;path=/');
- 响应体:(1)返回字符串: res.write('hello word!');
(2) 返回标签:res.write('<h2>标题</h2>');
(3)返回大段的html:res.write(`<!DOCTYPE html><html>code <script></script> </html>`); 这里只要是html页面中写的代码都可以,包括什么js代码css代码没问题。但是有一点注意,写大段html代码的时候,就不能使用单引号 了,要使用数字1前面的那个字符,它允许换行。
(4) 返回json数据:var data = {name:'xixi',age=20}; var str = JSON.stringify(data); res.write(str); 注意:因为 json数据是对象,而res.write();要求第一个参数必须是字符串,所以需要用js中的方法 JSON.stringify() 把json数据转换成字符串。 - res.end()在结尾必须加上。
静态资源请求:
使用nodejs服务,不管请求什么资源,都是在 var server = http.createServer(function(req,res) { } ); 橙色的花括号里面处理的。所有请求都要在这个里面处理。比如说如果想要请求css文件,那么就需要在function里读取css文件内容,然后在通过响应体返回给客户端。

1 //引入内置的http包 2 var http = require('http'); 3 //引入fs包操作文件 4 var fs = require('fs'); 5 //创建服务 6 var server = http.createServer(function(req,res){ 7 //客户端请求的文件的路径 8 var path = req.url; 9 //拼接文件路径 10 var filePath = './statics/'+path; //因为习惯上把静态资源文件放在statics目录或者public目录下 11 //读取文件内容 12 fs.readFile(filePath,function(err,data){ 13 if(err){ 14 res.statusCode = 404; 15 res.end('not found'); 16 return; //让后面代码不在执行,避免包错 17 } 18 res.statusCode = 200; 19 res.write(data); 20 res.end(); 21 }) 22 23 res.end('are you ok?'); //res.end()执行了的话,后面的代码就不能执行了,就像laravel中的dd(); 24 //异步返回的结果也不能执行了,因为res.end是在异步回来之前执行的 25 res.write('111'); //去掉res.end,执行这行代码,异步返回的结果还是能执行的。 26 }); 27 28 //端口监听 29 console.log('ok'); 30 server.listen(8090);
表单处理:

//引入内置的http包 var http = require('http'); //引入fs包操作文件 var fs = require('fs'); // var querystring = require('querystring'); //创建服务 var server = http.createServer(function(req,res){ //客户端请求的文件的路径 var url = req.url; //获取请求方式 var method = req.method; if(method.toLowerCase() == 'get' && url == '/form'){ //拼接文件路径 var filePath = 'statics/form.html'; //读取文件内容 fs.readFile(filePath,function(err,data){ if(err){ res.statusCode = 404; res.end('not found'); return; //让后面代码不在执行,避免包错 } res.setHeader('content-type','text/html'); res.statusCode = 200; res.write(data); res.end(); }); } //服务端处理提交上来的表单数据,这里和Apache不同,需要自己来完成 if(method.toLowerCase() == 'post' && url == '/form'){ var data = ''; req.addListener('data',function(chunk){ //chunk 参数是将传递的数据分割传过来 data += chunk; }); req.addListener('end',function(){ var d = querystring.parse(data); //是将字符串转换成对象,方便我们使用data数据中的某些参数 console.log(d); res.statusCode = 200; res.setHeader('content-type','text/html'); res.write(data); res.end(); }); } }); //端口监听 console.log('ok'); server.listen(8090);
客户端的代码略。注意一点:客户端代码的路径一定要和服务端设置的路径一致。或者说服务端判断路径的时候要和客户端的路径一致。