Node的基本使用

前言

Node的介绍

Node是一个服务端的Js库,他里面包含了多个模块,以及环境资源非常充足。我们可以通过各种模块的调用来实现对应的功能,他里面包含了俩个重点内容 一个为node 他是用于执行js代码的。一个为npm 他是用于管理对应的模块的(facebook出了一个yarn)。


模块是什么

在js中一个文件就是一个模块,多个小模块构成一个大的模块。模块的拆分主要针对的是代码的复用性,及组装的简便性。

在es6中我们对应的就存在了模块的概念 以及我们提供了对应的修饰符来操作模块

一个模块必须先导出 才能导入使用

模块导入

import 变量名 from "模块地址"

模块的导出

exprot 变量名
默认导入为
exprot default 变量名
在node中模块的导入导出使用 module(commonjs)

导出

module.exprots = 对应的内容

导入

const 变量名 = require('地址')
模块的导入有三种方式(了解)
AMD

AMD “异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。主要用于浏览器端的JS加载,为了不造成网络阻塞。只有当依赖的模块加载完毕,才会执行回调。

AMD使用define来定义模块,require来加载模块。

define(id?,dependencies?,factory);
require([module],callback);
CMD

Common Module Definition的缩写,也是一种异步模块定义规范,它和AMD的主要区别有两点:
1.对于模块的依赖,AMD是提前执行,CMD是延时执行。
2.AMD推崇依赖前置,CMD推崇就近依赖。

//AMD
define(['./a','./b'], function (a, b) {

    //依赖一开始就写好
    a.test();
    b.test();
});

//CMD
define(function (requie, exports, module) {

    //依赖就近书写
    var a = require('./a');
    a.test();
});
UMD

UMD: 通用模块规范
从名字就可以看出来UMD做的是大一统的工作,把前后端加载糅合在了一起,提供了一个前后端统一的解决方案。既然CommonJs和AMD风格一样流行,似乎缺少一个统一的规范,支持AMD和CommonJS模式。

UMD的实现原理:
1.先判断是否支持Node.js模块格式(exports是否存在),存在则使用Node.js模块格式。
2.再判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
3.前两个都不存在,则将模块公开到全局(window或global)
commonjs与ES6的module还是有很⼤区别的:*

1. 两者的模块导⼊导出语法不同,commonjs是module.exports,exports导出,require导⼊;ES6则是export导出,import导⼊。
2. commonjs是运⾏时加载模块,ES6是在静态编译期间就确定模块的依赖。
3. ES6在编译期间会将所有import提升到顶部,commonjs不会提升require。
4. commonjs导出的是⼀个值拷贝,会对加载结果进⾏缓存,⼀旦内部再修改这个值,则不会同步到外部。ES6是导出的⼀个引⽤,内
   部修改可以同步到外部。
5. 两者的循环导⼊的实现原理不同,commonjs是当模块遇到循环加载时,返回的是当前已经执⾏的部分的值,⽽不是代码全部执⾏后
   的值,两者可能会有差异。所以,输⼊变量的时候,必须⾮常⼩⼼。ES6
   模块是动态引⽤,如果使⽤import从⼀个模块加载变量(即import foo from
   ‘foo’),那些变量不会被缓存,⽽是成为⼀个指向被加载模块的引⽤,需要开发者⾃⼰保证,真正取值的时候能够取到值。
6. commonjs中顶层的this指向这个模块本⾝,⽽ES6中顶层this指向undefined7. 然后就是commonjs中的⼀些顶层变量在ES6中不再存在:

Node基本构成

JavaScript的构成

DOM (文档操作)

BOM (浏览器操作)

ES(ECMAScript)语法

Node的构成
语法 (ES3、ES5、ES6)
全局变量(global)
内置模块

http、url、path、fs、events…

入门模块
http模块
//common.js导入
const http = require('http')
//创建一个服务 前后端交互的
http.createServer((req,res)=>{
    res.end('hello')
}).listen(12345)
console.log('服务器已经启动');
运行
node http.js

fs模块(fileSystem 文件系统)

负责文件的增删改查
添加
//导入
const fs = require("fs")
//创建文件夹
fs.mkdir('./dir',function(err){
    if(err) throw new Error()
    console.log("创建成功");
})
//创建文件
fs.appendFile('./dir/text','hello.js',function(err){
    if(err) throw new Error()
    console.log('hello');
})
查询
fs.readFile('./bg.png',function(error,data){
    if(error) throw new Error()
    //写入内容
    fs.writeFile('./bg1.png',data,function(err,res){
        if(error) throw new Error()
        console.log('写入成功');
    })
})
//如果我想读取文件夹里面的所有内容 递归
fs.readdir('./dir',function(err,files){
    if(err) throw new Error()
    console.log(files);
})
拷贝
//文件copy方法
fs.copyFile('./bg1.png','./bg2.png',function(err){
    if(err) throw new Error()
    console.log('拷贝成功');
})
// 重命名
fs.rename('./bg.png','./hello.jpg',function(err){
    if(err) throw new Error()
    console.log('重命名成功');
})
删除
fs.rm('./hello.jpg',function(err){
    if(err) throw new Error()
    console.log('删除成功');
})
fs.rmDir('./dir',function(err){
    if(err) throw new Error()
    console.log('删除成功');
})
//删除文件
fs.unlink('./hello.jpg',function(err){
    if(err) throw new Error()
    console.log('删除成功');
})

HTTP模块(接收http请求的服务端模块)

//服务端的主要代码
const http = require('http')
//创建一个服务
http.createServer((req,res)=>{
    res.end()
}).listen(5000,function(){
    console.log('服务器已经启动');
})
引入路由的概念(根据访问地址的不同 来访问不同的接口 url模块)
//服务端的主要代码
const http = require('http')
const url = require('url')
//创建一个服务
http.createServer((req,res)=>{
    // console.log(url.parse(req.url).pathname);//获取/后的地址
    let router = url.parse(req.url).pathname //路由地址
    //响应对象 res 请求对象 req
    res.setHeader('Content-type','application/json;charset=utf-8') //设置响应头
    res.setHeader('Access-Control-Allow-Origin',"*") //跨域的请求头
    switch(router){
        case "/login":
            res.write('登录')
            break;
        case "/register":
            res.write('注册')
            break;
        case "/findUser":
            res.write('查找用户')
            break;
        default:
    }
    res.end()
}).listen(5000,function(){
    console.log('服务器已经启动');
})
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值