Nodejs入门开发

Web开发 专栏收录该内容
63 篇文章 0 订阅

前提

  • tcp:传输层的三次握手
  • http:应用层的访问资源协议
  • URL:格式是—协议://主机域名或者ip地址:port/资源路径

nodejs请求数据包

  • 请求行:请求方式POST、GET和http版本
  • 请求头:主机域名,操作系统和浏览器内核信息,浏览器能处理的文本和语言以及编码,cookie,connection
  • 空行:分割请求头和消息体
  • 请求体:具体内容

nodejs相应数据包

  • 状态行:http版本,状态码(200、302、404、500)
    • 1xx:指示信息—表示请求已接受,继续处理。
    • 2xx:成功—表示请求已被成功连接、理解、接受。
    • 3xx:重定向—要完成请求,必须进行更进一步的操作。
    • 4xx:客户端错误—请求由语法错误或者请求无法实现。
    • 5xx:服务器端错误—服务器未能实现合法的请求。(服务器代码出错)
  • 响应头:时间、服务器采用的版本比如apache,编码类型,超时时间设置等
  • 空行: 分割这个响应头和消息体
  • 消息体:相应的具体内容

nodejs是什么js

什么是js

  • javascript,解释性语言,不需要经过编译,必须要通过浏览器来执行

浏览器怎么执行

  • 通过浏览器的js引擎
    • 火狐的js引擎叫spidermonky
    • 谷歌的js引擎叫v8
    • 苹果浏览器(Safari)的解析引擎叫做nitro
  • 不同浏览器引擎不一样,但是都是ECMA标准。所以可以解析同一段js代码。

什么是node.js

  • 因为js必须通过浏览器运行,有人就希望js代码可以脱离浏览器在外部的环境来运行,这个人(ryan dahl)就把谷歌的v8引擎给脱离出来了,因为v8是所有引擎中效率最高的,封装好v8后生成了一个运行平台,就是node.js
  • 所以node.js是基于v8开发的一个js的运行平台,用于搭建相应速度快,易于扩展的网络应用
  • 为什么说响应快
    • Ryan Dahl这个人,早就封装好了一套库。我们直接基于它的库,就能开发我们对应的网络应用。
    • Node.js使用事件驱动,非阻塞I/O模型。
    • 开发出来的应用,轻量、高效,执行效率比较高。

node.js特点

  • 异步IO:完成一件事情后才能做第二件叫做同步,烧开水的时候同时去扫地叫做异步的操作。
  • 事件与回调:水烧开了之后,以事件的形式通知你,回来倒开水,就是在回调(处理烧完开水之后的结果)
  • 单线程:如果不想自己异步,可以在同步的时候叫多几个小伙伴帮忙,叫做多线程(同一时间段多个人做事,但每个人只专注于同一件事),多线程要请人帮忙就要花钱犒劳一下他们,如果自己一个人做的话,就叫单线程
  • 跨平台:Mac、Windows、Linux都可以运行node.js

node.js可以干嘛

  • 开发web应用
  • 开发命令式的代码语言
  • 开发桌面应用:基于HTML和CSS来布置的,很灵活,扩平台,举例:有道词典。
  • 已经有基于node.js的开源框架了:npm/bower/express

安装node.js

Mac下

安装xcode(命令:xcode-select --install)
安装Python
安装Homebrew(需要先安装ruby)
安装命令:
ruby –e “$(curl –fsSL 
https://raw.githubusercontent.com/Homebrew/install/master/install)”
安装 node.js 命令:brew install node。

Linux

a) 安装node.js之前,如果没有安装g++以及libssl-dev,则先要安装好,安装方法如下:
$ sudo apt –get install g++
$sudo apt –get install libssl-dev
b) 获取压缩源码:
$ wget 
https://nodejs.org/dist/v4.2.3/node-v4.2.3.tar.gz
c) 解压源码:$ tar zxvf nodejs-v4.2.3.tar.gz
d) 配置:$ ./configure
e) 编译:$make
f) 安装:$sudo make install

Windows

进入官网下载合适操作系统的.msi文件,然后按照默认安装。
安装后如果在黑框框里输入`node -v`没有反应的话,注意配置环境变量

node.js入门

万能的helloworld

1、新建一个js文件,编辑

function fun1(){
    console.log("hello javascript");
    //console这个模块,它里面的一个log方法,这个方法可以将我们这个传过去的这个字符串显示在控制台上面
}
fun1();//调用函数

2、打开黑框框进入这个文件所在文件夹,执行
执行node.js
3、完美,就这么简单

web形式执行js代码

1、新建一个js代码,命名为serverhello.js,编辑

//1、导入http模块,并用一个变量存储,后面会用来启动服务
var http = require("http");
//2、创建server实例,传递的参数是一个匿名函数,有两个参数req请求对象,resp响应对象
var server = http.createServer(function(req,resp){
    //这个匿名函数的方法体里代表着我们要如何处理,只要有一定相应,就会调用这个函数
    console.log("hello server,someone requseting");
    //给浏览器返回数据,否则访问了127.0.0.1:2017的时候就会一直得不到响应
    resp.write("hello browser");
    resp.end();//这个方法才是真正把我们的数据发过去的,上面那个write只是写入response对象里去的
});

//3、启动服务并监听端口,两个参数
//端口号:可以自己设置,比如2017
//匿名函数,为了获取一个参数err(错误对象参数),没有报错的话err为空
server.listen("2017",function(err){
    if(err != NULL){
        console.log("start fail!");
    }else{
        //只要err为空,表示服务已经程控,就可以执行这句话打印一下
        console.log("start success!at port 2017");
    }
})

2、访问127.0.0.1:2017就会看到我们的黑框框控制台和网页都有显示,表示一个服务就搭好了!
网页端显示
控制台显示
3、如果需要停掉web服务的话,需要在黑框框里按ctrl+c连续两次
详细的原理参考http://www.maiziedu.com/wiki/nodejs/web/

node.js模块应用

把js模块化

  • 一个模块就是一个js文件,里面的函数都是这个模块下的功能
  • 引用模块的方法
var file = require("/file.js");
var db= require("/db.js");//引进来的模块,得到了一个对象
  • 但是无法直接引用模块里的函数,必须要把模块里的函数先导出
/*file.js*/
function read(path){
    console.log("假装已经完成了对"+path+"的文件读取");
}
export read = read;
/*也可以写成export readfile = read,有一点点类似于函数的声明*/
  • 另外两种导出的方法,这两种方法后面的那个函数必须匿名
/*db.js*/
export.add = function(){
    console.log("假装已经添加了数据");
}

module.export.del = function(){
    console.log("假装已经删除了数据");
}
/*这两个引用,其实是同一个对象,这个exports.属性名 导出去的东西,最终都会综合到module.exports.属性名 这里面,一起导出去。*/

node.js包

可以发布,可以下载,注意对象的属性的赋值的巧用

node.js流

普通的读取文件太好内存,但是流可以解决这个问题,就像管道流水一样,读一段操作完再读再操作,不浪费内存地实现大文件的操作。

node.js实现服务器代码

这个文章写的非常好
http://www.maiziedu.com/wiki/nodejs/demo/

  • 1
    点赞
  • 0
    评论
  • 20
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值