如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器,并配上 mod_php5 模块和 php-cgi。 从这个角度看,整个”接收 HTTP 请求并提供 Web 页面”的需求就不需要 PHP 来处理。 不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的。 在我们创建 Node.js 第一个 “Hello, World!” 应用前,让我们先了解下 Node.js 应用是由哪几部分组成的:

  1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。
  2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
  3. 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据

创建 Node.js 应用

一、引入http 模块

我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http,实例如下:

  1. var http = require("http")

二、创建服务器

接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:

  1. var http = require("http")
  2. http.createServer(function (request, response) {
  3. response.writeHead(200, { "Content-Type": "text/plain" }) // 发送HTTP头部, HTTP状态值:200 内容类型:text/plain
  4. response.end("Hello World\n") // 发送响应数据 "Hello World"
  5. }).listen(8888)
  6. console.log("Server running at http://127.0.0.1:8888/")

以上代码我们完成了一个可以工作的 HTTP 服务器
使用 node 命令执行以上的代码:

  1. node server.js
  2. Server running at http://127.0.0.1:8888/

接下来我们通过 Gif 图为大家演示实例操作:
node-hello.gif

实现一个静态http服务器

  1. const http = require("http");
  2. const fs = require("fs")
  3. http.createServer(function (req, res) {
  4. // 打开 www/ 目录下的文件
  5. fs.readFile("./www/" + req.url, function (err, data) {
  6. if (err) {
  7. console.log(err);
  8. res.write("404");
  9. res.end();
  10. } else {
  11. console.log(data.toString())
  12. res.write(data);
  13. res.end();
  14. }
  15. })
  16. }).listen(8080)
  1. const http = require("http");
  2. const fs = require("fs");
  3. const querystring = require("querystring");
  4. /*
  5. *1. 访问www内的静态资源
  6. *2. 解析get请求, 并保存到serverLog.txt
  7. *3. 解析post请求serverLog.txt
  8. */
  9. // 获取当前时间
  10. function getNowDate() {
  11. let dt = new Date();
  12. let year = dt.getFullYear();
  13. let month = dt.getMonth();
  14. let day = dt.getDate();
  15. // 将月份加1
  16. month = month + 1;
  17. // 将月份补齐到两位
  18. if (month <= 9) {
  19. month = "0" + month;
  20. }
  21. // 将日补齐到两位
  22. if (day <= 9) {
  23. day = "0" + day;
  24. }
  25. let hour = dt.getHours();
  26. let minutes = dt.getMinutes();
  27. let seconds = dt.getSeconds();
  28. return year + "-" + month + "-" + day + "-" + hour + "-" + minutes + "-" + seconds;
  29. }
  30. http.createServer(function (req, res) {
  31. // 1. 尝试访问www下的静态资源
  32. fs.readFile("./www" + req.url, function (err, data) {
  33. if (err) {
  34. //2. 解析请求的参数, 并保存到log
  35. if (req.method === "GET") {
  36. console.log("收到了GET请求")
  37. let getData = querystring.parse(req.url.split("?")[1]);
  38. console.log("获得的get数据为==>", getData);
  39. fs.writeFile("./serverLog.txt", getNowDate() + "\n" + JSON.stringify(getData) + "\n", { flag: 'a' }, function (err) {
  40. if (err) {
  41. console.log(err);
  42. console.log("GET数据保存至log出错");
  43. }
  44. });
  45. } else if (req.method == "POST") {
  46. console.log("收到了POST请求")
  47. let tmpData = ''
  48. req.on("data", function (data) {
  49. tmpData += data;
  50. });
  51. req.on("end", function () {
  52. let postData = querystring.parse(tmpData);
  53. console.log("获得的post数据为==>", postData);
  54. fs.writeFile("./serverLog.txt", getNowDate() + "\n" + JSON.stringify(postData) + "\n", { flag: 'a' }, function (err) {
  55. if (err) {
  56. console.log(err);
  57. console.log("POST数据保存至log出错");
  58. }
  59. });
  60. })
  61. }
  62. res.write("404");
  63. res.end();
  64. } else {
  65. res.write(data);
  66. res.end();
  67. }
  68. })
  69. }).listen(8000)
  1. var http = require("http")
  2. var fs = require("fs")
  3. var path = require("path")
  4. //创建服务
  5. http.createServer(function (req, res) {
  6. var html = fs.readFileSync(path.join(__dirname, "/main.html"))
  7. // res.writeHead(200, {'Content-Type': 'text/plain'}) //普通文本
  8. res.writeHead(200, { "Content-Type": "text/html" }) //html文本
  9. // res.setHeader("Content-Type", "text/html")
  10. // res.setHeader("Set-Cookie", ["type=ninja", "language=javascript"])
  11. res.write(html)
  12. res.end()
  13. }).listen("7890", function (err) {
  14. if (err) {
  15. console.log(err)
  16. throw err
  17. }
  18. console.log("服务器已开启。端口号为:7890")
  19. })
  20. console.log("Server running at http://127.0.0.1:7890/")
  1. var http = require("http")
  2. var fs = require("fs")
  3. var url = require("url")
  4. http.createServer(function (req, res) {
  5. var hostname = req.headers.host //获取requset信息中的host地址
  6. var pathname = url.parse(req.url).pathname //获取pathname
  7. if (pathname === "/") {
  8. //判断是否为域名地址(简单路由)
  9. readFileAndResponse("/index.html", res)
  10. }
  11. }).listen(7890)
  12. function readFileAndResponse(pathname, response) {
  13. fs.readFile(pathname.substr(1), "", function (err, data) {
  14. if (err) {
  15. //文件不存在或读取错误返回404,并打印page not found
  16. response.writeHead(404)
  17. response.end("page not found")
  18. } else {
  19. response.end(data) //读取成功返回相应页面信息
  20. }
  21. })
  22. }
  23. console.log("Server running at http://127.0.0.1:7890/")
  1. var https = require('https')
  2. var option = {
  3. hostname: 'm.baidu.com',
  4. path: '/tcx?appui=alaxs&page=api/chapterList&gid=4315647048&pageNum=1&chapter_order=asc&site=&saveContent=1',
  5. headers: {
  6. 'Accept': '*/*',
  7. 'Accept-Encoding': 'utf-8', //这里设置返回的编码方式 设置其他的会是乱码
  8. 'Accept-Language': 'zh-CN,zhq=0.8',
  9. 'Connection': 'keep-alive',
  10. 'Cookie': 'BAIDUID=A78C39414751FF9349AAFB0FDA505058:FG=1 true __bsi=12248088537049104479_00_7_N_R_33_0303_cca8_Y',
  11. 'Host': 'm.baidu.com',
  12. 'Referer': 'https://m.baidu.com/tcx?appui=alaxs&page=detail&gid=4305265392&from=dushu'
  13. }
  14. }
  15. https.get(option, function (res) {
  16. var chunks = []
  17. res.on('data', function (chunk) {
  18. chunks.push(chunk)
  19. })
  20. res.on('end', function () {
  21. console.log(Buffer.concat(chunks).toString())
  22. })
  23. })

fs模块读写文件

  1. const fs = require("fs");
  2. // 写入文件
  3. fs.writeFile("HelloWorld.txt", "HelloWorld HelloNode", function (err) {
  4. if (err) {
  5. console.log(err);
  6. }
  7. // 读取刚刚写入的数据
  8. else {
  9. fs.readFile("HelloWorld.txt", function (err, data) {
  10. if (err) {
  11. console.log(err);
  12. } else {
  13. console.log(data.toString());
  14. }
  15. })
  16. }
  17. })