Node.js —— 入门

Nodejs 简介


什么是Nodejs?

一、Node.js 不是一门语言,不是库和框架,nodejs可以帮助我们打开服务器这个黑盒子,去访问数据库获取或存储数据,使用的是js语言更快上手。

二、Node.js 是一个JavaScript运行时环境(平台)也就是说Node.js可以解析和执行JS代码,以前只有浏览器能够解析执行JS,使用Node可以脱离浏览器来运行


浏览器与Node.js 中的JavaScript区别

1、浏览器中的JS

(1)EcmaScript

  • 基础语法

  • if、var、function、Object、Array等

  • DOM和BOM

2、Node.js中的JS

(1)EcmaScript(没有DOM和BOM,服务端不操作页面)

(2)在Node中为JavaScript提供了一些服务器级别的API

  • 文件读写

  • 网络服务的构建

  • http服务器等


Nodejs的特性

  • event-driven 事件驱动

  • non-blocking I/O model 非阻塞IO模型(异步API)

  • lightweight and efflclent 轻量和高效


ip地址和端口号

1、ip地址:是用来定位计算机的

  • 客户端访问服务端:比如客户端访问www.baidu.com网站,浏览器不认识网址,是通过百度他的服务器IP地址,DNS解析成对应网站的;
  • 服务端返回响应数据给客户端:服务器会自动识别客户端的ip地址和端口号,返回数据

2、端口号是用来定位具体的应用程序(软件)告诉服务器,客户端是在哪个软件上交互
所有需要联网通信的应用程序都会占用一个端口号
ip地址和端口号概念



Node.js 模块化开发


Node的核心模块

node提供的服务器级别的API,绝大多数都是封装在一个个具名的模块中的,所以我们要使用时,通过require先引入这个核心模块就能使用了,例如fs(文件读写功能)


Node的模块系统(用户自定义模块)

node每次只能操作一个js文件,如果想同时操作多个js文件该怎么做呢?

1、require 方法

(1)加载模块并执行里面的代码
(2)拿到被加载文件,所导出的接口对象(exports)

2、exports 对象

在每个文件模块中都提供了一个对象exports,默认是一个空对象,我们要做的就是把需要导出到外部的内容赋给这个exports对象,外部就可以访问了。
例:
(1)a.js文件引入b.js文件:var ret = require('./b.js'); console.log(ret.foo) ==> hello
(2)b.js文件中导出需要外部访问的内容,通过exports对象实现:exports.foo = 'hello'


第三方模块


Nodejs的常用API


一、文件读写 fs模块

1、读文件 fs.readFile

  • 使用require引入fs模块(file-system)文件系统
	var fs = require(' fs ')
  • 通过fs.readFile方法来读取文件

参数一:读取的文件路径
参数二:回调函数,携带error和data参数,成功读取时data返回二进制的数据,需要通过toString方法转换成我们认识的字符,失败返回error信息

fs.readFile( ' 路径 ',function( error,data ) {

       if (data) {
			console.log( data.toString() )  ==> 二进制转换成我们能看懂的字符
		} else { console.log(error) }

 })

2、写文件 fs.writeFile

参数一:写(创建)文件的路径以及起个文件名,./data/你好.js

参数二:写入的内容

参数三:回调函数,函数只有一个参数err,因为只是写文件,返回写入是否成功即可,没有返回数据需要获取

fs.writeFile( ’ 路径 ‘,’ 写入的内容 ',回调函数( err错误信息 ) )

fs.writeFile( ' ./data/src/你好.js ',' 大家好,我是写文件 ',function( err ) {

        if ( err ) { console.log( err ) }

}  )

3、读取目录下所有文件夹名 fs.readdir

fs.readdir('目录路径', function(err, files) {
            if(err) {
                return response.end('Can not find')
            }
            console.log(files);
        })

二、HTTP搭建服务器

1、加载http核心模块

var http = require ( ' http ' )

2、使用http.createServer()方法创建Web服务器,返回一个Server实例

var server = http.createServer()

3、服务器要干嘛:

接收请求、发送响应

① 注册监听 request 请求事件,收到客户端发送过来的请求时触发

② 执行第二个参数:回调函数function(请求对象request,响应对象response)

server.on('request', function(request, response) { })  // 给实例出来的Server 监听请求事件
request请求对象

可以获取客户端的请求信息,例如路径 request.url

response响应对象

(1)设置响应数据的类型
在http协议中,Content-Type是用来告知对方,我所发送的数据内容是什么类型
在服务端发送的响应数据,默认是万国码utf-8的,需要告知客户端的浏览器数据内容的类型,才不会出现乱码的情况
response.setHeader('Content-Type', 'text/plain或html; charset=utf-8')
Content-Type : 设置数据内容类型 charset:字符编码类型为utf-8
text/plain:表示数据是普通的文本 text/html:表示数据是html格式的文本,转义标签
image/jpeg:表示数据是图片,图片不需要设置字符编码
更多类型参考HTTP Mine-type,不同扩展名的资源对应不同类型
(2)发送响应数据的方法 end
response.write方法可以发送响应数据,可使用多次,必须使用response的end方法结尾,告诉客户端,我响应完了。也可以直接使用response.end方法发送响应数据,因为一般只需要发送一次就够了,方便简洁

	// 	on 监听request请求事件  调用回调函数
server.on('request', function(request, response) {	// request 请求对象   response 响应对象
    console.log('收到客户端发送过来的请求,请求路径是:' + request.url);
    // 不同路径 返回不同响应数据
    if (request.url === '/') {
        response.setHeader('Content-Type', 'text/plain; charset=utf-8')
        response.end('index  普通文本')
    } else if(request.url == '/content') {
        response.setHeader('Content-Type', 'text/html; charset=utf-8')
        response.end('<h1> 我是HTML!</h1>')
    }
    // 返回的数据只能是字符串或者二进制 可以通过JSON的stringify方法转换成字符串
    var data = [{
        name : 'xiaoming',
        age  : 18
    }, {
        name : 'xiaohua',
        age  : 18
    }]
    if (request.url === '/list') {
        response.end(JSON.stringify(data))
    }
})

4、绑定端口号,启动服务器(端口号是实现网络通信的)

server.listen(3000,function(){})
在这里插入图片描述

发送文件中的数据

实际开发中,我们都是把html、css、js、img等资源放在一个单独的文件夹中 (可能在项目中,也可能在其他盘里,如C盘里面有个WWW文件夹专门放资源,都可以填写对应路径去读取:C:/xxxx),然后我们在服务器里面去读取里面的数据资源,具体实现如下 👇

  • 引入fs读写文件模块,通过request请求对象中的url方法判断用户访问的页面
  • 通过fs.readFile()方法去读取对应的html中的数据
  • 根据文件数据内容的类型,设置好对应类型(参考HTTP Mine-type)再发送响应数据给客户端浏览器
    在这里插入图片描述
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值