logo

遮瑕

相信你会成为最想成为的人

本文主要用于记录node.js基础知识,主要内容为 菜鸟教程学习,以WIM平台下的 Node.js v4.4.3 LTS为例。

文章名:node.js学习笔记
作者:遮瑕

注意本文只适用于想只学习基础的朋友,请希望系统学习的朋友不要使用本文。

一、认识node.js

(一)什么是node.js

  简单来说,node.js就是运行在服务器端的JavaScript。JavaScript是一种具有函数优先的轻量级、解释的编程语言,它是一个知名的开发Web页面的脚本语言。
  node.js基于 Google 的 V8 引擎运行(V8 引擎执行 Javascript 的速度非常快)。
  我们可以通过node.js快速的进行服务器开发。

(二)怎么安装node.js

  Node.js 安装包及源码下载地址为:https://nodejs.org/zh-cn/download/
  Node.js 历史版本下载地址为:https://nodejs.org/dist/
  直接安装完成就好,对win来说,安装包(.msi)版本就是常用的安装包安装的形式,二进制(.exe)版本不用安装,可以直接运行。

(三)node.js使用

1.node.js运行

  node.js运行有两种方式,一种是采用Node.js REPL(交互式解释器),一种是通过node直接运行node.js。

(1)Node.js REPL(交互式解释器)

  Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Windows 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。其可以执行以下操作:

读取 - 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。
执行 - 执行输入的数据结构
打印 - 输出结果
循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。

1.启动REPL

  在cmd窗口输入命令

node

即可开启REPL窗口。

2.简单的表达式

  我们可以直接输入+-*/进行运算

>1+4
5
>5 / 2
2.5

3.变量定义

  变量可以使用var定义,或者直接变量名 = 10,var定义后不会输出,没用使用var的话会进行一次输出。同时可以使用console.log()来输出变量。

>x = 10
10
>var y = 10
undefined
console.log(x)
10
undefined
console.log("Hello World")
Hello World
undefined

4.多行表达式

  REPL会自动识别需要多行的表达式,例如:

var x = 0
undefined
> do {
... x++;
... console.log("x: " + x);
... } while ( x < 5 );
x: 1
x: 2
x: 3
x: 4
x: 5
undefined
>

其中的三点“...”是它自动生成的。

5.下划线(_)变量

  可以用下划线表示上一个表达式的值,实现快速调用。

> var x = 10
undefined
> var y = 20
undefined
> x + y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
>

6.REPL命令

ctrl + c - 退出当前终端。
ctrl + c 按下两次 - 退出 Node REPL。
ctrl + d - 退出 Node REPL.
向上/向下 键 - 查看输入的历史命令
tab 键 - 列出当前命令
.help - 列出使用命令
.break - 退出多行表达式
.clear - 退出多行表达式
.save filename - 保存当前的 Node REPL 会话到指定文件
.load filename - 载入当前 Node REPL 会话的文件内容。

(2)cmd窗口直接运行node.js文件

  我们也可以先写一个node.js程序文件,然后通过node.js去执行它,例如在指定文件夹位置输入:

node server.js

通过node去执行当前目录下的server.js文件。

2.node.js包管理器(NPM)

  NPM作用主要为:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

具体使用请需要时再去查看,不必过多关注。

二、node.js快速实现服务器

(一)建立本机服务器

只能本机访问自己跑的服务器

  在使用node.js时,我们不是用它在服务器上实现了一个应用,而是在实现应用的同时,实现了整个http服务器。一般使用node.js实现应用主要分为以下三步:

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

  简单来说,我们可以使用以下的程序来实现一个可以输出“Hello World”的服务器:

//使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 the_http
var the_http = require('http');

//使用 http.createServer() 方法创建服务器
the_http.createServer(function (request, response) {

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type':'text/plain;charset=UTF-8'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888,'127.0.0.1');  //使用 listen 方法绑定 8888 端口以及127.0.0.1地址

//我们对以上的程序进行拆分:the_http.createServer(服务器应用函数).listen(8888,'127.0.0.1');
//其中,服务器应用函数:function(request, response){B}
//其中,服务器应用函数内部:response.writeHead();  response.end();

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

以上程序基本原理为:

  • 第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
  • 接下来我们调用 http 模块提供的函数createServer。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。

需要注意的是,在这里我们只能使用127.0.0.1等主机环回地址,地址为环回地址的任何数据包都不应该离开计算机(主机),发送它的数据不是被发送到本地网络或互联网,它只是被自己“环回”,并且发送数据包的计算机成为接收者。

(二)让内网可以访问服务器

和跑服务器的设备在一个局域网的设备都可以访问这个服务器

  我们可以采用如下步骤实现:

1.将服务器设备连接到局域网,查询到它的IP(命令行界面输入ipconfig)
2.我们服务器程序的IP修改为我们刚刚查询到的IP
3.访问设备在网址栏输入刚刚设置的IP,成功实现内网访问

注意:连接到局域网的IP如果设置的自动分配的话,是会改变的,最好设置为手动输入,定死一个IP,确保程序可以正常运行。

三、node.js服务器的实际使用

(一)网页与服务器数据交互

  网页页面和服务器数据交互的主要思路为:

1、利用nodejs搭建服务器,监听客户端的请求,根据URL的不同响应不同的页面。
2、响应的数据来自于node.js对文件系统的访问。
3、采用POST请求提交表单。

大体如下图所示:
网页服务器交互示意

网页服务器交互示意

1.node.js输出html页面

  既然要实现数据交互,那我们首先需要实现可以通过服务器向设备提供html页面。代码如下,主要使用到http模块进行网络通信;使用fs模块获取服务器内html页面数据;使用response.write()发送读取到的html数据,让浏览器以html的格式进行解释,在response.end()之前,response.write()可以被执行多次。

var the_http = require('http');
//使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 the_http
var sendhtml=require('fs');
//使用 require 指令来载入 fs 模块,并将实例化的 fs 赋值给变量 sendhtml
//fs(file system) 模块是nodejs提供的用于访问本地文件系统的功能模块,它使得运行于nodejs环境下的JavaScript具备直接读写本地文件的能力。

var server = the_http.createServer();
var ser = server.listen(6500,'192.168.3.202');

var htmlfile_addr = __dirname;
//__dirname表示当前文件所在的目录,例如__dirname/file.txt代表当前目录内的file.txt文件的绝对地址

var htmlfile = htmlfile_addr + '/index.html'

//创建一个HTTP sever对象,监听端口
server.on('request',function(req,res)
{
    console.log("有请求");
    sendData(htmlfile,req,res);
    //定义一个函数来发送页面

    function sendData(file,req,res)
    {
        sendhtml.readFile(file,function(err,data)
        {
            if(err)
            {
                res.writeHead(404,'err',{'content-type':'text/html;charset=utf-8'});
                res.write("出错了");
                res.end();
            }else
            {
                res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
                //发送html页面的head
                res.write(data);
                //输出读取到的文件数据,也就是html页面本体
                res.end();
            }
        });
    };
});

2.html与服务器的信息传输

  上文完成了HTML页面的显示,但是我们还需要实现数据的交互,及HTML页面可以发送数据到node.js处。在这里,为了接收和解析前端发送来的数据,我们需要使用到url模块
  这里只考虑最简易的方法,及前端通过访问不同url路径直接对服务器数据进行修改。

var http = require('http');
var url = require('url');

http.createServer(function(req, res)
{
    res.writeHead(200, {'Content-Type': 'text/plain'});

    var params = url.parse(req.url, true).query;
    // 解析 url 参数

    res.write("网站名:" + params.name);
    res.write("\n");
    res.write("网站 URL:" + params.url);
    res.end();

}).listen(3000);

访问方式如下:http://127.0.0.1:3000/?name=1&url=123,以上url解析出来后,params.name为1,params.url为123。

(二)服务器数据库SQLite

  作为服务器而言,显然还需要满足数据存储的功能,我们选择使用SQLite作为数据库,因为其本体极小,适合使用在低性能嵌入式系统上。SQLite最大的特点就是没有任何数据库服务器,无论是C、java、node.js,只需要相应的驱动,就可以直接对数据库进行读写。在这里我们当然选择node.js进行SQLite的读写,node.js提供了较多的模块,我们选择使用sqlite3模块

  本段简单描述如何使用node.js的sqlite3模块进行SQLite相关操作。大概如下,以后有需要再进行学习。

var fs = require('fs');
//数据库文件的路径
var dbfile = 'D:\SQLite\Hello_SQLite.db';
//同步检查给定路径中是​​否已存在文件,根据检查结果返回一个布尔值
var exists = fs.existsSync(dbfile);
//sqlite3.verbose() - 设置执行模式为输出调用堆栈
var sqlite3 = require('sqlite3').verbose();
//返回数据库对象并且自动打开和连接数据库
var the_db = new sqlite3.Database(dbfile,function () {
//增
var sql1 = the_db.prepare("insert into Hello values('hello,world')");
sql1.run();
console.log(sql1);//可以这样检查
});
//增
var sql1 = db.prepare("insert into 表名 values (内容,跟mysql一样)");
sql1.run();
//console.log(sql1);//可以这样检查

//删
var sql2 = db.prepare("delete from 表名 where id = 1");
//console.log(sql2);
sql2.run();

//改
var sql3 = db.prepare("update 表名 set name = winston where id = 1");
sql3.run();

//查
//查一个表的所有数据
db.all("select * from 表名",function(err,row){
    console.log(JSON.stringify(row));
})
//查一条数据
db().each("select * from 表名",function(err,row){
     console.log(row);
})

版权属于:zhexia
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年01月16日 01:34
0
发表评论


7 文章数
18 评论量
7 分类数
9 页面数
已在风雨中度过 264天12小时1分
目录
来自 《node.js学习笔记》
暗黑模式
暗黑模式
评论
返回顶部
暗黑模式
暗黑模式
评论
返回顶部