// 引入http模块 var http = require('http'); // 创建服务器 var serve = http.createServer(); // 监听服务器端口 serve.listen(8000, function () { console.log('http://127.0.0.1:8000') }) // 请求处理函数function(形参1,形参2){} // 形参1:request请求对象 获取到当前请求的路径,方法等本次请求的所有信息 // 形参2:response响应对象 发送响应数据 server.on('request', function(request, response) { console.log('服务端收到客户端的请求啦!!!'); // 向客户端页面返回字符串 response.write("hello node"); // 结束响应 response.end(); });
setHeader
方法server.on('request', function(request, response) { // 设置响应头 response.setHeader('Content-Type','text/plain;charset=utf-8'); // 设置数据类型及字符集 // 向客户端页面返回字符串 response.write("赟赟"); // 结束响应 response.end(); });
html 解析问题
// 设置响应头 response.setHeader('Content-Type','text/html;charset=utf-8'); // 设置数据类型及字符集
但是我们不能一直将 html 代码写到服务器的方法中, 而是需要建一个 xx.html 文件, 将 html 文件中的内容返回给客户端
var http = require('http'); // 引入文件操作模块 var fs = require('fs'); var server = http.createServer(); server.on('request', function(request, response) { // 读取html文件中的内容 fs.readFile('./xx.html','utf8',function(error,html_data){ // 设置响应头 response.setHeader('Content-Type', 'text/html;charset=utf-8'); // 将html中的内容响应回客户端,结束响应 response.end(html_data); }) });
响应图片等其他静态资源
server.on('request', function(request, response) { // url 属性返回请求的URL字符串 var urls = request.url; if( urls =='/'){ fs.readFile('./xxx.html','utf8',function(error,html_data){ // 设置响应头 response.setHeader('Content-Type', 'text/html;charset=utf-8'); // 将html中的内容响应回客户端,结束响应 response.end(html_data); }) }else if(urls.indexOf('jpg') != -1){ // 判断请求图片 fs.readFile('./xx.jpg',function(error,html_data){ response.end(html_data); }) } }
http.ServerRequest
并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作,譬如上传文件。而很多时候我们可能并不需要理会请求体的内容,恶意的 POST 请求会大大消耗服务器的资源。所以 Node.js 默认是不会解析请求体的,当我们需要的时候,只能手动来做。
获取请求类型
var url = require('url'); // 接收客户端向服务器发送的请求 serve.on('request', function (req, res) { console.log('服务端收到客户端的请求啦') // 获取请求类型 var method = req.method; if (method == 'GET') { url_obj = url.parse(req.url, true); // 解析get请求 console.log(url_obj.query); console.log(url_obj.pathname); } else if (method == 'POST') { // 为了支持各种可能的 HTTP 应用,Node.js 的 HTTP API 是非常底层的。 它只涉及流处理与消息解析。 它把一个消息解析成消息头和消息主体,但不解析具体的消息头或消息主体。 var data = ''; // net 模块中的 net.Socket 提供的data及end事件 req.on('data', function (d) { data += d; console.log(data); }) // 绑定end事件,监听数据接受完成 req.on('end', function () { console.log(require('querystring').parse(data)) }) } })
通过本章的学习, 对前后端交互有的大致的了解