nodejs(第二篇):nodejs和JavaScript组成区别、nodejs写出helloword、使用Sublime Text 3作为nodejs的开发工具、nodejs的核心模块

nodejs(第二篇):nodejs和JavaScript组成区别、nodejs写出helloword、使用Sublime Text 3作为nodejs的开发工具、nodejs的核心模块

一、nodejs和JavaScript组成区别

Chromium V8是google开源的JavaScript引擎,用于执行JavaScript,类似JVM执行java字节码。在node.js诞生之前,V8是内置于Chromium中的,现在也内置于node.js中。

node.js=V8+内置基本模块(大多用JavaScript编写),类似JRE=JVM+java标准库

node.js诞生之前,JavaScript只能运行于浏览器,现在也可以在服务器端运行于node.js

 

浏览器端js和服务器端nodejs中的js组成区别

浏览器端:

  • ECMAScript,描述了JavaScript语言的语法和基本对象

  • 文档对象模型(DOM),描述处理网页内容的方法和接口

  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口

服务器端:

  • ECMAScript

  • node.js内置模块:文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等

 

二、nodejs写出helloword

使用Node执行js脚本文件

1.创建编写JavaScript脚本文件helloworld.js

写入内容

var hi = 'hello world !'
​
console.log(hi)

  

2.打开终端,定位到脚本文件所属目录,Windows下也可以按住shift+右键进入

 

3.输入 node 文件名 来执行对应的脚本文件

 

三、使用Sublime Text 3作为nodejs的开发工具

每次创建一个js文件,然后在命令提示行里输入node 文件名执行比较麻烦,这里采用Sublime Text 3作为nodejs的开发工具。

Windows下安装Sublime Text 3

环境介绍

  • 电脑系统:Windows 7-64位;

  • 编辑器:Sublime Text3;

 

1、下载Sublime Text3安装

下载地址https://www.sublimetext.com/3

下载安装文件,直接点击默认进行安装

 

2、下载Nodejs插件,下载地址为:https://github.com/tanepiper/SublimeText-Nodejs

下载zip压缩包后解压,文件名改为 Nodejs

 

3、打开Sublime Text3,点击菜单“Perferences” =>“Browse Packages”打开“Packages”文件夹,并将第2步的Nodejs文件夹剪切进来

 

4、打开Nodejs文件夹,打开文件“Nodejs.sublime-build”:

 

  • 将代码 "encoding": "cp1252" 改为 "encoding": "utf8"

  • 将代码 "shell_cmd": ["taskkill /F /IM node.exe & node", "$file"] 改为 "cmd": ["taskkill","/F", "/IM", "node.exe","&","node", "$file"]

设置 主要解决 端口占用的问题:重启sublime text之后,配置就算完成了。

5、打开文件“Nodejs.sublime-settings”或者显示为Nodejs:

 

  • 将代码 "node_command": false改为 "node_command": "C:\nodejsnvm\nodejs\node.exe"

  • 将代码 "npm_command": false 改为 "npm_command": "C:\nodejsnvm\nodejs\npm.cmd"

  • 保存文件

 

 

6、编写一个测试文件test.js,按“ctrl+B"运行代码,运行结果如下图所示:

console.log('Server running')

  


说明:配置成功, 前面的错误提示 是cmd 在启动一个新的node时需要杀掉之前开启的node.exe,如果没有开启 就会提示error 没有找到node.exe进程

 

 

 

四、nodejs的核心模块

1.Node.js为JavaScript提供了很多服务器级别的API,这些API绝大多数被包装到了一个具名的核心模块中,例如文件操作的fs核心模块、HTTP服务构建的http模块、path路径操作模块、os操作系统信息模块等等

2.所有的核心模块在使用的时候都必须手动的使用“require”方法来加载,然后才可以使用

3.举例:

(1)nodejs 读写文件

使用node版本v10.16.3

 

浏览器中的JavaScript是没有文件操作的能力的,但是node中的JavaScript是具有文件操作的能力的

在node中操作文件需要引入fs模块,fs是node平台提供的核心模块,专门用来操作文件。fs即file-system.

fs模块相关方法

第一步,引入使用到的文件系统模块 
var fs = require('fs');
 
第二步
相关方法
读文件:fs.readFile(file[, options], callback)
    * 参数1:要读取的文件路径,必填。
    * 参数2:读取文件时的选项,比如:文件编码utf8。选填。
    * 参数3:文件读取完毕后的回调函数,必填。回调函数,回调有两个参数 (err, data),其中data是文件的内容(buffer对象),err是错误信息参数,在写入失败时返回。
如果读取文件成功,则 data返回的是数据,error返回的是null。如果失败,那么data返回的是undefined没有数据
,error返回的是错误对象
    读文件注意:
    * 该操作采用异步执行
    * 回调函数有两个参数,分别是err和data
    * 如果读取文件时没有指定编码,返回的是二进制数据,如指定编码utf8,会返回指定的编码数据。
    * 只要异步操作,回调函数第一个都是错误对象err优先
    
    
 
写文件:fs.writeFile(file, data[, options], callback);
    * 参数1:要写入的文件路径,必填。
    * 参数2:要写入的数据,必填。
    * 参数3:写入文件时的选项,比如:文件编码。
    * 参数4:文件写入完毕后的回调函数,必填。
    回调函数,如果文件写入成功,error 是 null,如果文件写入失败,error 就是错误对象。
    
    写文件注意:
    * 该操作采用异步执行
    * 如果文件存在则替换原内容
    * 默认写入的文件编码为utf8
    * 回调函数有1个参数:err,表示在写入文件的操作过程中是否出错了。
    * 如果出错了err != null,成功时 err === null
    * 写入文件(文件不存在则自动创建)
    
    

  


示例1:读取文件

var fs = require('fs')
fs.readFile('./data/hello.txt', function (error, data) {
  // console.log(data)
  // console.log(error)
  // console.log(data)
​
})

  



如果读取出现乱码,可以添加编码方式,注意文件也必须是同样的编码方式,这里统一使用utf8

var fs = require('fs')
fs.readFile('./data/hello.txt', 'utf8',function (error, data) {
  // 在这里就可以通过判断 error 来确认是否有错误发生
  if (error) {
    console.log('读取文件失败了')
  } else {
    console.log(data.toString());
    console.log(data.toString('utf8'));
  }
}
​

  

 

示例2:写文件

var fs = require('fs')
fs.writeFile('./data/你好.md', '大家好,给大家介绍一下,我是Node.js','utf8', function (error) {
  // console.log('文件写入成功')
  // console.log(error)
  if (error) {
    console.log('写入失败')
  } else {
    console.log('写入成功了')
  }
})
​

  

(2)http网络服务构建核心模块

单一的http服务

使用seblime text 3,在你的项目的根目录下创建一个叫server.js的文件,并写入以下代码:

// 你可以使用 Node 非常轻松的构建一个 Web 服务器
// 在 Node 中专门提供了一个核心模块:http
// http 这个模块的职责就是帮你创建编写服务器的
​
// 1. 加载 http 核心模块
var http = require('http');
​
// 2. 使用 http.createServer() 方法创建一个 Web 服务器
//    返回一个 Server 实例
var server = http.createServer();
​
// 3. 服务器要干嘛?
//    提供服务:对 数据的服务
//    发请求
//    接收请求
//    处理请求
//    给个反馈(发送响应)
​
server.on('request', function () {
  console.log('收到客户端的请求了')
})
​
//    server注册 request 请求事件
//    当客户端请求过来,就会自动触发
//服务器的 request 请求事件,然后执行第二个参数:回调处理函数
​
​
​
// 4. 绑定端口号,启动服务器
server.listen(3000,function(){
    console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问')
})
​
​

  

 

按住ctrl+B执行程序

此时打开浏览器访问 http://127.0.0.1:3000/ ,可以看到seblime text 3输出区打印

 

 

而浏览器页面由于服务没有返回任何数据,一直处于等待的空白页面。

 

 

根据不同的请求url路径发送不同的响应内容

var http = require('http')
​
// 1. 创建 Server
var server = http.createServer()
​
// 2. 监听 request 请求事件,设置请求处理函数
server.on('request', function (request, response) {
  // request 请求事件处理函数,需要接收两个参数:
//    request 请求对象
//        请求对象可以用来获取客户端的一些请求信息,例如请求路径
//    response 响应对象
//        响应对象可以用来给客户端发送响应消息
  console.log('收到请求了,请求路径是:' + request.url)
  console.log('请求我的客户端的地址是:', request.socket.remoteAddress, request.socket.remotePort)
​
  // response.write('hello')
  // response.write(' world')
  // reresponses.end()
​
  // 上面的方式比较麻烦,推荐使用更简单的方式,直接 end 的同时发送响应数据
  // response.end('hello nodejs')
​
​
​
  // 根据不同的请求路径发送不同的响应结果
  // 1. 获取请求路径
  //    request.url 获取到的是端口号之后的那一部分路径
  //    也就是说所有的 url 都是以 / 开头的
  // 2. 判断路径处理响应
​
  var url = request.url
​
  if (url === '/') {
    response.end('index page')
  } else if (url === '/login') {
    response.end('login page')
  } else if (url === '/users') {
    var users = [
            {name:'eric',age:20},
            {name:'jack',age:30},
            {name:'rose',age:29},
            {name:'tom',age:18}
        ]
​
    // 响应内容只能是二进制数据或者字符串
    //  数字
    //  对象
    //  数组
    //  布尔值
    //如果是数字,对象,数组,布尔值或者其他的,需要转换
    //JSON.stringify()将内容转为字符串
        
    //response.end(JSON.stringify(users))
    
  } else {
    response.end('404 Not Found.')
  }
})
​
// 3. 绑定端口号,启动服务
server.listen(3000, function () {
  console.log('服务器启动成功,可以访问了。。。')
})
​

  

(3)os操作系统信息模块

//加载os核心模块
var os=require('os');
//获取当前机器的CPU信息
console.log(os.cpus());
//获取当前机器的内存信息
console.log(os.totalmem());

  

(4)path路径处理核心模块

//加载path核心模块
var path=require('path');
//输出文件的扩展名
console.log(path.extname('c:code/hello.txt'));

  

 

 

参考资料

[1]https://blog.csdn.net/w_q_1025/article/details/54896346

 

posted on 2020-03-22 20:13  Nicholas--  阅读(454)  评论(0编辑  收藏  举报

导航