nodejs学习--npm、COMMONJS模块化规范

nodeJS

一、nodeJS的介绍

  1. NodeJS不但自己可以完成服务器软件的功能,也不再需要php,asp,jsp等传统的服务器语言
  2. nodeJS可以解析JS代码,而没有浏览器安全级别的限制,因为,它的运行可以脱离浏览器的环境,而是在服务端运行;提供了很多系统级别的API,如:
    文件的读写
    进程的管理
    网络通信
  3. NodeJS的包管理器npm,成为世界上最大的开放源代码的生态系统。

二、环境搭建

1、下载:
进入nodeJS官网(https://nodejs.org/en/),中文官网(http://nodejs.cn/)进行下载
2、安装:
​ windows环境下安装,没有特殊的,只需要全部下一步即可。
3、配置环境变量:
https://blog.csdn.net/jiang7701037/article/details/80707786(百度)

三、COMMONJS模块化规范

commonJS的模块化是后端的模块化规范,nodeJS使用的就是commonJS规范。

1、引入别的模块:require

1)、引入官方模块和第三方模块时,不需要写路径

const http = require('http');//引入http模块

2、引入自定义模块需要写路径:

const routes = require("./routes/index");//表示引入当前路径下的routes文件夹下的index模块(文件)const p = require("./person.js");//表示引入当前路径下的routes文件夹下的index模块(文件)
2、对外导出:module.exports

对外导出,就是对外暴露,可以暴露基本类型的变量,对象,函数等等。
1)、对外导出一个:

//person.js
var p = { 
	id : "007",
	name :"张三丰",
	work:function(str){
		return this.name+"在努力地敲代码";
	},
	
	add:function(n1,n2){
		return n1+n2;
	}	
}
//模块接口暴露
module.exports = p; //外部可以使用p对象里的所有属性和方法

2)、对外导出多个:

//person.js
var p = { 
	id : "007",
	name :"张三丰",
	work:function(str){
		return this.name+"在努力地敲代码";
	},
	
	add:function(n1,n2){
		return n1+n2;
	}	
}

//模块接口暴露
module.exports.work = p.work; //表示外部只能使用work函数
module.exports.add = p.add;//表示外部只能使用add函数

四、nodeJS搭建web服务器

const http = require(‘http’);//引入http模块
const hostname ='127.0.0.1';//服务器地址
const port = 706;//服务器的端口号
const server = http.createServer((request,response)=>{//使用http来创建服务器,
		response.statusCode=200;
		response.setHeader('Content-Type','text/plain');
		response.end('hello nodeJS\n');
	});
server.listen(port,hostname,()=>{//服务器监听
	console.log(`Server running at http://${hostname}:${port}/`);
}); 

1)启动服务器: 在命令行窗口输入命令:node server.js
2)在浏览器输入 http://localhost:706/

五、内置模块 http , fs , path (根据情况进行讲解)

1、http

​ http模块主要完成和前端交互(还可以完成请求其它服务器),http模块对外暴露的是对象。
方法:

  • createServer(function(request,response){}): 创建服务器**
  • ​ get(): 发送get请求,获取地址对应的数据(主要是获取其它服务器的数据)。
  • ​ request():如何抓取异步的数据

使用Http模块搭建服务器的步骤

1)、引入http模块

let http = require('http')

2)、创建web服务 返回http对象

let app = http.createServer((req,res)=>{
	req 请求体(请求对象)  浏览器->服务器
	
	req.url  地址   提取地址栏数据
	req.on('data') 提取非地址栏数据 所有的http[s]都会触发end事件
	req.on('end') 
	
	res 响应体(响应对象)  服务器->浏览器

	res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});响应头设置
	res.write(字符/数据<string><buffer>) 返回数据
	res.end() 结束响应 必须
	
})

3)、监听服务器

app.listen(端口,[地址],[回调])

监听成功,回调一次

端口: 1-65535 1024以下系统占用

虚拟地址localhost 真实域名xx.duapp.com

4)、启动服务器的命令:

node 文件名

热部署和启动命令

由于,每次更新代码后, 需要重新启动服务器,很麻烦

推荐命令行工具:supervisor 或者nodemon

安装方式: npm install supervisor -g 或者 npm install nodemon -g

启动服务器 nodemon 文件名

2、静态资源托管(fs模块)
2.1)介绍

fs:fileSystem; 这个模块可以读取文件的内容,给文件写内容,创建文件夹,删除文件夹等等有关文件和文件夹的一切操作。

一般来说,前端的如下代码都会请求一个静态资源

<a href=".."></a>
<img src="..."/>
location.href="..."
body{
    background:url(....)
}

后端资源读取静态资源文件就要使用fs模块

fs.readFile(文件名,[编码方式],回调(err,data));
2.2) fs模块使用

读取文件

  • ​ 异步的方式:
fs.readFile('文件路径',[编码方式],(err,data)=>{})

[^err ]: err 错误 ,null没有错误

  • 同步的方式:
let data = fs.readFileSync('文件路径') 

处理错误

try{

​ 要排错的代码

}catch(e){

}

更名

fs.renameSync('改前','改后');

删除

fs.unlinkSync('文件路径')
3 path系统模块

操作系统磁盘路径

windows: c:\user\admin 磁盘的路径的分割是: \ 网络上的路径分割是 /
mac: ~/desktop/1901

API

磁盘路径解析 parse

path.parse('c:\\wamp\\xx.png') // string -> object

//返回
{
   root: 'c:\\', 盘符
   dir: 'c:\\wamp', 目录
   base: 'xx.png',  文件名
   ext: '.png', 扩展名
   name: 'xx' 	文件,不含扩展名
}

片段合并join

path.join('磁盘路径1','磁盘路径2''磁盘路径n')

__dirname 魔术变量 返回当前文件所在的磁盘路径

片段合并 resolve

path.resolve('磁盘路径1','磁盘路径n')

合并磁盘片段,右到左找,如果找到了根,那就不再朝前找了;拼接时,是从左到右拼接,如果没有给根路径,以当前文件路径为根(即默认:加上 __dirname)。

六、Nodejs路由搭建

1、概念:

路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
即:根据前端请求路径,调用不同的函数,就是引路者的角色

2、代码:

//1、server.js
var http = require('http');
var url = require('url');
var router = require('./router/index');//包含路由设置的模块

var server = http.createServer((request,response)=>{
    response.writeHeader(200,{"Content-type":"text/html;charset=utf-8"});
    if(request.url!=='/favicon.ico'){
        var pathName = url.parse(request.url).pathname.replace(/\//,'');
        console.log(pathName);
        try{
            router[pathName](request,response);
        }catch(err){
            router['error'](request,response);
        }
    }
    response.write("hello,我来自nodeJS");
    response.end();
});
server.listen(8000);
console.log("server listen localhost:8000");


//2、./router/index.js
let file = require("./file");
module.exports = {
      …………  
    //读取图片文件
    "img":function(request,response){
        file.readImg("img/2.jpg",response);
    },
    //读取html文件。
    "index":function(request,response){
        file.readHTML("index.html",response);
    }
};

//3、./file.js

路由模块文件(file.js):
var fs = require('fs');

module.exports = {
  readImg: function (file, res) {
      fs.readFile(file, 'binary', function (err, data) {
         if (err) throw err
         res.writeHead(200, {'Content-Type': 'image/jpeg'})
         res.write(data, 'binary')
         res.end()
    })
  }readHTML: function (fileName, res) {
        fs.readFile(fileName, 'utf8',  (err, data)=> {
            if (err) throw err;
            res.writeHead(200, {'Content-Type': 'text/html'})
            res.write(data, 'utf8')
            res.end()
        });
    }
}

七、nodemon 测试工具使用

热部署和启动命令

由于,每次更新代码后, 需要重新启动服务器,很麻烦

推荐命令行工具:supervisor 或者nodemon

安装方式: npm install supervisor -g 或者 npm install nodemon -g

启动服务器 nodemon 文件名

八、npm , nrm 工具使用;

1、npm

介绍:
​ npm是Node.js的包管理工具(nodeJS package manager)。

​ 1)、 安装第三方模块:

npm install  模块名 参数(可选:-g   --save-dev  --save)

-g: golbal,全局安装; 跟操作系统安装软件,跟安装qq,微信等工具是一个意思。

–save-dev:本地安装(开发依赖)

–save:本地安装(生产依赖)

​ 2)、卸载第三方模块:

npm uninstall  模块名 参数(可选:-g   --save-dev  --save)
2、nrm

可以选择npm的服务器来源(选择最快的源进行安装)

npm install nrm -g     安装选择源的工具包
nrm ls 查看所有源
nrm test 测试所有源,可以看到当前哪个源的速度快
nrm use 切换源名 ,切换到最快的源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值