Node.js—基本知识

一、第一个Node代码

1. 运行Node.js

  通过node E:Node代码hello.js运行代码;Node.js是服务器的程序,写的js语句都将运行在服务器上。返回给客户的,都是已经处理好的纯HTML

// require表示引包,引包就是引用自己的一个特殊功能
var http = require("http")
// 创建服务器,参数是一个回调函数,表示有请求进来,要做什么
var server = http.createServer(function(req,res){
  // req表示请求,request;res表示响应,response
  // 设置HTTP头部,状态码是200,文件类型是html,字符集UTF8
  res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
  res.end("Hello World")
});

// 运行服务器
server.listen(8088,"127.0.0.1");

2. Node.js执行HTML

  Node.js没有根目录的概念,因为它根本没有任何的web容器!所有静态资源都需要写入路由。URL和真实物理文件是没有关系的,URL是通过Node的顶层路由设计,呈递某一个静态文件。

// require表示引包,引包就是引用自己的一个特殊功能
var http = require("http");
// fs读取文件的
var fs = require("fs");

var server = http.createServer(function(req, res) {
  if(req.url == "/fang"){
    fs.readFile("./test.html", function(err, data) {
      res.writeHead(200, {"Content-type": "text/html;charset=UTF-8"});
      res.end(data);
    });
  }else if (req.url == "/yuan") {
    fs.readFile("./test2.html", function(err, data) {
      res.writeHead(200, {"Content-type": "text/html;charset=UTF-8"});
      res.end(data);
    });
  }else if(req.url == "/img"){
    fs.readFile("./img.jpg", function(err, data) {
      res.writeHead(200,  {'Content-Type':'image/jpg'});  
      res.end(data);
    });
  }else{
    res.writeHead(404, {"Content-type": "text/html;charset=UTF-8"});
    res.end("么有");
  }
  
});
// 运行服务器
server.listen(8088, "127.0.0.1");

二、HTTP模块

  我们知道传统的HTTP服务器是由Aphche、Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器。

//require引用模块
var http = require("http");

//创建一个服务器,回调函数表示接收到请求之后做的事情
var server = http.createServer(function(req,res){
    res.writeHead(200,{"content-type":"text/html"});
	//req参数表示请求,res表示响应;必须有一个res.end()
	console.log("服务器接收到了请求" + req.url);
        res.write("<h1>主标题1<h1>");
	res.end("<h1>主标题2<h1>");
});

//监听端口
server.listen(3000,"127.0.0.1");

  http模块中封装了一个HTTP服务器和一个简易的HTTP客户端:http.Server()用于创建是一个基于事件的HTTP服务器,而http.request()和http.get()可以作为客户端向HTTP服务器发起请求。在这里使用的createServer()方法返回了一个http.Server对象,text/plain的意思是将文件设置为纯文本格式,浏览器在获取到这种文件时并不会对其进行处理,如果将content-type设置为text/html,浏览器在获取到这种文件时会自动调用HTML的解析器对文件进行相应的处理。另外,也可以用new http.Server()构造函数的方法创建http.Server对象。

  http.Server的事件,http.Server最常用的事件是"request",当接收到http请求时触发。在"request"事件中,传入回调函数的参数req和res分别是http.IncomingMessage和http.ServerResponse的实例:http.IncomingMessage类包含了从客户端发来的http请求信息,它可以用来访问响应状态、消息头、以及数据等;http.ServerResponse类是返回给客户端的信息,它有三个重要的方法,用于返回响应头、响应内容以及结束请求。

  writeHead(statusCode[, statusMessage][,headers]):向请求的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头

  write(chunk[,encoding][,callback]):向请求的客户端发送响应内容,chunk是一个buffer或者字符串,如果chunk是字符串,则需要指定编码方式,默认为utf-8,在end()方法调用之前可以多次调用

  end([data][,encoding][,callback]):结束响应,告知客户端所有发送已经结束,如果不调用这个函数,客户端将一直处于等待状态

原文地址:https://www.cnblogs.com/hq82/p/10834670.html