NodeJs 1

NodeJs

什么是Node.js

能让js运行在服务器端的js运行环境

为什么要把js运行在服务器端?

传统的js不能读取本地计算机硬盘上的数据(因为如果可以读取到数据,就很不安全)
在nodejs中,因为nodejs扩展了js的运行场景,把js的触手触及到了服务器端,那么就可以使用node让js访问本地硬盘上的内容

node的特性(今后看到就要想到)

  1. 单线程
    单线程的NodeJs不会为每个连接可会创建一个线程,仅用一个线程
  2. 非阻塞式IO(输入/输出)
    单非阻塞式IO NodeJs在访问高IO操作后不会等待其完成,而是立即去执行其他的代码,操作完成后使用回调函数返回,保证高效的利用当前线程,不会造成硬件浪费
  3. 事件驱动 通过事件来驱动整个程序的进行
    由于是单线程,所以把高IO的操作就会移动到事件队列中等待完成,完成后通过回调函数的方式返回给线程来进行处理。
    这个循环处理的过程称为事件环

说的简单一点,就是让nodejs的执行效率非常高,提升速度

node的特点

  1. node是单线程
  2. node擅长高并发处理
  3. node擅长IO密集型处理

node比较适合那些应用

  1. 考试系统
  2. 图文直播
  3. 功夫熊(按摩的) 豆瓣的站内信 腾讯和阿里也在局部使用了node
  4. node单线程 如果线程崩溃,就凉凉了(不适用与大型、关键的项目)

扩展小知识

  • 在node中,因为非阻塞IO的特性,所以node经常会出现回调地狱

魔术变量

__(双底杠)dirname表示当前执行脚本所在的目录
__(双底杠)filename表示当前正在执行的脚本文件名,它将输出文件所在位置的角度路劲

如何运行node

  1. 打开dos 或者打开shell 窗口
  2. 把路径指向当前要运行的文件夹
    • (1)cd空格把文件夹拉过来
    • (2)在指定的文件夹中按住shift 鼠标右键选择在此打开xx窗口
  3. 输入node空格文件名(可以不用加js后缀)

模块
每个js文件可以抽象成一个模块(作用用来封装独立的小功能点)
模块化
当前项目使用多个模块组成就是模块化

在nodejs 模块有两种

1.内置模块
2.自定义模块

1. 内置模块http

http模块可以创建node的webserver
创建的过程(先不用知道创建好之后到底能干什么 只需要能把它写出来 至于其他内容后面在说)

以下内容要做到盲写

// 1.引用创建服务器必要的http模块
var http=require("http");
// 2.使用createServer来创建服务器
// createServer(function (req,res){})
http.createServer(function(req,res){
    // 3.向前台响应头信息,200是状态码,说明响应成功,返回的文件为html,字符集为utf-8
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    // 4.向前台返回一个信息,展示在页面中
    res.end("hello world")
}).listen(3000);//绑定端口

2.url模块

url模块是用来操作当前的url内容
因为原生node webserver有一个小的bug 就是二次请求

解决二次请求,首先我们要知道为什么有二次请求?

就是因为当前页面需要请求title前面的小图标,造成二次请求
解决方案 判断当前这次请求是干什么的 如果是请求小图标 那么就直接return即可

详细代码
var http=require("http");
// 1.引用url模块
var url=require("url");
http.createServer(function(req,res){
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    // 为了测试二次请求那么在服务器中向控制台打印下东西
    // console.log("么么哒");
    // 为了解决二次请求  先来看一下为什么出现二次请求  req.url就是当前请求的路径   true 就是把当前传入的url创焕成对象
    // console.log(url.parse(req.url,true));
    // 解决二次请求
    var reqUrl=url.parse(req.url,true);
    if(reqUrl.pathname=="/favicon.ico"){
        return;
    }
    console.log("么么哒")
    res.end("你好世界!!!!")
}).listen(3000);//绑定端口

3.fs模块 写入

fs.writeFile(filename, data, [options], callback)

  • filename 文件名
  • data 要往文件里写的内容,可以是字符串
  • options可选参数 encoding 编码,默认是utf8。flag写文件的模式
  • callback 回调方法

flag写入文件模式flag{“a”}
Node往已经存在的文件里追加内容a,向内容最后插入内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值