node.js学习笔记Day1

nodejs

1.node.js简介

1.1node.js是什么

不是语言,不是框架,不是库。

JavsScript运行时环境,可以解析和执行js代码。(以前只有浏览器可以)

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.

构建于chromes的V8引擎(解析执行js最快),开发了一个独立的js运行时环境

1.1.1浏览器中的js

  • EcmaScript
    • 基本的语法
    • if
    • var
    • function
    • object
    • array
  • BOM
  • DOM

1.1.2node.js中的js

  • EcmaScript
  • 没有DOM,BOM
  • 在node这个执行环境中为js提供服务器级别的操作API
    • 文件读写
    • 网络服务的构建
    • 网络通信
    • http服务器

1.1.3特性

Nod.js uses an event-driven,non blocking I/O model that makes it lightweight and efficient

  • event-driven事件驱动

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

  • lightweight and efficient轻量,高效

  • node.js npm是最大的开源库生态系统

    • 绝大多数js相关的包放在了npm上,方便下载

    • npm install jquery
      

1.2node.js做什么

  • Web服务器后台
  • 命令行工具
    • npm
    • git(c语言开发的)
    • hexo(node开发的)
  • 游戏服务器,接口服务器。。。

学习目标

  • B/S编程
    • Browser-Server
    • back-end
  • 模块化编程
    • requirejs
    • Seajs
    • 以前js只能通过script标签来加载
    • 在node中可以像@import()一样来引用js脚本文件
  • node常用API
  • 异步编程
    • 回调函数
    • Promise
    • async
    • generator
  • Express Web 开发框架
  • Ecmascript 6(一个语法)

2.基本操作

2.1安装

官网 默认路径

查看版本:在cmd 输入

node -v

2.2helloworld

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

    var foo ='bar'
    console.log(foo)
    
  2. 打开终端,cd到文件所属目录。或者在文件夹里,按住shift右键-在此处打开powershell

  3. 输入 ,回车运行

    node helloworld.js
    

2.3读写文件

fs模块:(file-system)提供所有文件操作相关的API。

读取文件函数:fs.readFile( , )

第一个参数:读取文件路径

第二个参数:一个回调函数:function(error,data)

读取成功 读取失败
error null 包含报错信息的一个error对象
data 读取到的数据 undefined
var fs=require('fs') //加载fs模块
fs.readFile('./data/read.txt',function(error,data){
    if (error){
        console.log('读取文件失败')
    }
    else{
        console.log(data.toString())
    }
})

写文件函数:fs.writeFile( , )

第一个参数:写文件路径

第二个参数:写的内容

第三个参数:一个回调函数:function(error,data)

var fs=require('fs') //加载fs模块
fs.writeFile('./data/write.txt','hello world',function(error){
    console.log('write succeed')
})

2.4http服务

http模块:创建编写服务器

服务器要做到:

  • 提供服务
  • 发请求
  • 接收请求
  • 处理请求
  • 给反馈
var http = require('http')
var server = http.createServer()
/*注册request请求事件,当客户端发请求,自动触发服务器的request请求事件
然后执行第二个参数进行回调处理*/
server.on('request',function(){
    console.log('收到请求')
})
//绑定端口号,启动服务器
server.listen(3000,function(){
    console.log('服务器启动成功,可在浏览器通过127.0.0.1:3000 本机回送IP访问')
})

ctrl+c 可以关闭客户端

带上if判断,稍微复杂一些的情况

var http = require('http')
var server = http.createServer()

//request请求对象,用来获取请求信息,例如请求路径
//response响应对象用来给客户端发送响应消息
server.on('request',function(request,response){
    console.log('收到请求,路径为:'+request.url)
    //response 对象有一个方法:write 可以用来给客户端发送响应数据
    //write可以使用多次,但是最后一定要使用end来结束响应,否则客户端会一直等待
    if (request.url=='/haha'){
        response.write('hello')
    }
    
    response.write('node js')
    response.end()
})

server.listen(3000,function(){
    console.log('服务器启动成功,可通过127.0.0.1:3000访问')
})

当在浏览器输入 http://127.0.0.1:3000/haha 时响应为

node.js学习笔记Day1_第1张图片

若输入内容有中文,可能会有乱码现象,需要指定编码:(详见官网对api的解释,可以为普通,htmp等)

response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});

response.setHeader('Content-Type','text/html; charset=utf-8')

3.node中的js

  • Ecmascript
  • 核心模块
  • 第三方模块
  • 用户自定义模块

3.1核心模块

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

引用模块格式:

var fs = require('http')

3.2用户自定义模块

在a.js中代码如下

console.log('a start')
require('./b.js')
console.log('a end')

同文件夹下,b.js代码如下

console.log('b.js run')

运行a.js,powershell结果如下:

PS G:\code\nodejs> node a.js                       
a start
b.js run
a end
  • 可如此重复叠加多个。具有继承性
  • require即加载指定程序的代码
  • 闭包。模块作用域。加载的模块如c++函数一样,对具有封装性(更强)。不同模块中定义的方法(function)也不能直接调用
  • 可以省略后缀名
  • 每个文件中提供一个对象export可以输出

a.js

var bExorts = require('./b')//通过bExorts变量调用其模块内部的方法和数据
console.log(bExorts.data)
console.log(bExorts.fadd(10,20))

b.js

var foo='bbb'
function add(x,y){
    return x+y
}
//向exports对象动态添加方法(function)或者参数,则可以在其他文件中被调用
exports.fadd=add//此处故意用不一样的名字,表达命名是随意的,但是建议用一样的,以免歧义
exports.data='hello'

4.Web服务器开发

4.1IP地址和端口号

  • IP地址用来定位计算机
  • 端口号用来定位具体的应用程序
  • 一切需要联网通信的软件都会占用一个端口号
  • 端口号范围从0~65535
  • 计算机中有一些默认的端口号,最好不要使用
    • http服务器的80
    • 1
    • 2
  • 尽量使用简单好记。3000,5000等
  • 可以同时打开多个服务,只要占用的端口号不一样

4.2读入各种资源文件(.html为例)

在同文件夹下建一个source文件夹,放入需要被读入的html文件 test.html

var http = require('http')
var server = http.createServer()
var fs =require('fs')
server.on('request',function(request,response){
    console.log('收到请求,路径为:'+request.url)
    //‘/’就是一个url:统一资源定位符
    if (request.url=='/'){
        fs.readFile('./source/test.html',function(err,data){
            if (err){
                response.setHeader('Content-Type','text/plain; charset=utf-8')
                response.end('文件读取失败')
            }
            else{
                response.setHeader('Content-Type','text/html; charset=utf-8')
                response.end(data)
            }
        })
    }
})
server.listen(3000,function(){
    console.log('服务器启动成功,可通过127.0.0.1:3000访问')
})

注意content-type ‘text/html’

不同资源对应不一样,于https://tool.oschina.net/ 可以查询

你可能感兴趣的:(node.js)