【学习笔记】Node.js入门操作

139 阅读5分钟

简介

Node.js是什么?

  • Node.js 是一个开源服务端环境
  • Node.js is 是免费的
  • Node.js 在各种平台(Windows、Linux、Unix、Mac OS X等)上运行
  • Node.js 在服务器上使用 JavaScript

Node.js 的优势?

Node.js 使用异步编程!

web服务器的一项常见任务是打开服务器上的文件并将内容返回给客户端。

以下是 PHP 或 ASP 如何处理文件请求:

  1. 将任务发送到计算机的文件系统。
  2. 等待文件系统打开并读取文件。
  3. 将内容返回到客户端。
  4. 准备好处理下一个请求。

以下是 Node.js 如何处理文件请求:

  1. 将任务发送到计算机的文件系统。
  2. 准备好处理下一个请求。
  3. 文件系统打开并读取文件后,服务器将内容返回给客户端。

Node.js 消除了等待,只是继续下一个请求。

Node.js 运行单线程、非阻塞、异步编程,这非常节省内存。

Node.js 能做什么?

  • Node.js 可以生成动态页面内容
  • Node.js 可以在服务器上创建、打开、读取、写入、删除和关闭文件
  • Node.js 可以收集表单数据
  • Node.js 可以添加、删除、修改数据库中的数据

Node.js 文件是什么样的?

  • Node.js 文件包含将在某些事件上执行的任务
  • 典型事件是有人试图访问服务器上的端口
  • Node.js 文件必须在服务器上启动才能生效
  • Node.js 文件的扩展名为 “.js”

安装配置

直接百度,教程很多,注意辨别。

多版本node管理见NVM

使用nvm切记需要卸载干净前序没有使用nvm管理的node版本

使用

  1. 使用require()方法引入模块;
  2. 根据不同的模块使用对应的格式进行编码;
  3. node test.js启动Node.js服务器;
  4. 浏览器通过访问本地指定端口号查看结果。

HTTP模块 http

Node.js 具有一个名为 HTTP 的内置模块,该模块 Node.js 通过超文本传输协议(HTTP)传输数据。

  1. 引用 HTTP 模块 var http = require('http');

  2. 使用createServer()方法创建一个 HTTP 服务

  3. 使用writeHead()方法 添加 HTTP 标头(状态码,包含响应头的对象)

  4. 读取 Query String :req.url 读取域名后的 url 部分

  5. 拆分 Query String :利用内置URL模块拆分为可读部分

     var http = require("http");
     ​
     http.createServer(function (req, res) {
         res.writeHead(200, { "Content-Type": "text/html" });
         var q = url.parse(req.url, true).query;
         var txt = q.year + " " + q.month;
         res.end(txt);
       }).listen(8080);
     ​
     // http://localhost:8080/?year=2017&month=July
     // 2017 July
    
  6. 启动文件node 文件名.js

  7. 访问 http://localhost:8080 查看结果

文件系统模块 fs

  • 读取文件 fs.readFile()

     var http = require("http");
     var fs = require("fs");
     ​
     http.createServer(function (req, res) {
         fs.readFile("index.html", function (err, data) {
           res.writeHead(200, { "Content-Type": "text/html" });
           res.write(data);
           return res.end();
         });
       })
       .listen(8080);
    
  • 创建文件

    • fs.appendFile()

      将指定的内容追加到一个文件。如文件不存在,将创建该文件

       var fs = require('fs');
       fs.appendFile('mynewfile1.txt', 'Hello  content!', function (err) {
        if (err) throw err;
        console.log('Saved!');
       });
      
    • fs.open()

      将 "flag" 作为第二个参数,如果标志是 "w" 表示 "写入",则打开指定的文件进行写入。如果文件不存在,将创建一个空文件

       var fs = require('fs');
       fs.open('mynewfile2.txt', 'w', function (err,  file) {
        if (err) throw err;
        console.log('Saved!');
       });
      
    • fs.writeFile()

      替换指定的文件和内容(如果存在)。如果文件不存在,将创建包含指定内容的新文件

       var fs = require('fs');
       fs.writeFile('mynewfile3.txt', 'Hello  content!', function (err) {
        if (err) throw err;
         console.log('Saved!');
       });
      
  • 更新文件

    • fs.appendFile()追加内容到指定文件的末尾
    • fs.writeFile()替换指定的文件和内容
  • 删除文件 fs.unlink()

     var fs = require('fs');
     fs.unlink('mynewfile2.txt', function (err) {
         if (err) throw err;
         console.log('File deleted!');
         });
    
  • 文件重命名 fs.rename()

     var fs = require('fs');
     fs.rename('mynewfile1.txt', 'myrenamedfile.txt', function (err) {
         if (err) throw err;
         console.log('File Renamed!');
         });
    

URL模块 url

解析地址 url.parse():返回一个 URL 对象,其中地址的每个部分都是它的属性

 var url = require('url');
 var adr = 'http://localhost:8080/default.htm?year=2017&month=february';
 var q = url.parse(adr, true);
 console.log(q.host); //returns 'localhost:8080'
 console.log(q.pathname); //returns '/default.htm'
 console.log(q.search); //returns '?year=2017&month=february'
 var qdata = q.query; //returns an object: { year: 2017, month: 'february' }
 console.log(qdata.month); //returns 'february'

Node.js 文件服务

 var http = require("http");
 var url = require("url");
 var fs = require("fs");
 http.createServer(function (req, res) {
     var q = url.parse(req.url, true);
     var filename = "." + q.pathname;
     fs.readFile(filename, function (err, data) {
       if (err) {
         res.writeHead(404, { "Content-Type": "text/html" });
         return res.end("404 Not Found");
       }
       res.writeHead(200, { "Content-Type": "text/html" });
       res.write(data);
       return res.end();
     });
   }).listen(8080);

NPM

NPM 是 Node.js 的包(Package)管理器,或者你也可以把它当作模块。

Node.js 的包(Package)包含模块所需的所有文件。

模块是可以包含在项目中的 JavaScript 库。

直接在控制台使用npm安装相应的包,使用require即可引入使用。

事件 events

Node.js 非常适合于事件驱动的应用程序。

此模块中,所有事件属性和方法都是一个EventEmitter对象的实例。要能够访问这些对象和方法,就需要先创建一个EventEmitter对象

 var events = require('events');
 var eventsEmitter = new events.EventEmitter();
 ​
 //Create an event handler:
 var myEventHandler = function () {
 console.log('I hear a scream!');
 }
 //Assign the event handler to an event:
 eventEmitter.on('scream', myEventHandler);
 //Fire the 'scream' event:
 eventEmitter.emit('scream');

文件上传 formidable

使用npm下载后,使用require引入。

  1. 创建Upload表单
  2. 解析上传的文件
  3. 保存文件
 var http = require("http");
 var formidable = require("formidable");
 var fs = require("fs");
 http
   .createServer(function (req, res) {
     if (req.url == "/fileupload") {
       var form = new formidable.IncomingForm();
       form.parse(req, function (err, fields, files) {
         var oldpath = files.filetoupload.filepath;
         var newpath =
           "E:/learning-notes/Node_code/" + files.filetoupload.originalFilename;
         fs.rename(oldpath, newpath, function (err) {
           if (err) throw err;
           res.write("File uploaded and moved!");
           res.end();
         });
       });
     } else {
       res.writeHead(200, { "Content-Type": "text/html" });
       res.write(
         '<form action="fileupload" method="post" enctype="multipart/form-data">'
       );
       res.write('<input type="file" name="filetoupload"><br>');
       res.write('<input type="submit">');
       res.write("</form>");
       return res.end();
     }
   })
   .listen(8080);

发送邮件 nodemailer

npm install nodemailer

 var nodemailer = require("nodemailer");
 var transporter = nodemailer.createTransport({
   service: "gmail",
   auth: {
     user: " youremail@gmail.com ",
     pass: " yourpassword ",
   },
 });
 var mailOptions = {
   from: " youremail@gmail.com ",
   //多个对象用,分隔
   to: " myfriend@yahoo.com ",
   subject: "Sending Email using Node.js",
   text: "That was easy!",
   //还可以发送html格式的文本
   //html: "<h1>HTML from email</h1>"
 };
 transporter.sendMail(mailOptions, function (error, info) {
   if (error) {
     console.log(error);
   } else {
     console.log("Email sent: " + info.response);
   }
 });

MySQL

npm install mysql

 // 导入mysql依赖
 const mysql = require("mysql")
 // 获取Connection对象
 const connection = mysql.createConnection({
     host:'127.0.0.1',
     // 用户名
     user:'root',
     // 端口号
     port: 3306,
     password: 'root',
     // 数据库名字
     database: 'nodeJs'
 })
 // 建立连接
 connection.connect();
 // 执行查询操作
 connection.query('select * from admin',function (error,results,fields){
     // 控制台打印结果
     console.log(results);
 })
 // 关闭连接
 connection.end();

参考资料

简易教程cankaoshouce.com/nodejs/node…

express www.expressjs.com.cn/