Node.js服务端开发总结(二)

一、模块的使用

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。(一个js文件就是一个模块)

模块的最大好处:大大提高了代码的可维护性,方便。

优点:防止命名冲突。代码复用。高维护性。

规范:

 CommonJS 的 Modules 规范:    NodeJs
 ES6 模块化规范     import ...  from  ...

使用:

导出数据方式一:

exports.num = num;
exports.sum = sum;
exports.Animal = Animal;

导出数据方式二:

// 通过module.exports 等于一个对象,来导出数据
// 对象可采用es6简化对象的写法
module.exports = {
    num,
    sum,
    Animal
};

导入数据:const m1 = require("文件位置");

注意: 如果要使用某个模块里面的数据,则需要使用 require 关键字进行导入。
在导入用户自己开发的模块的时候,需要加上路径(1. 相对路径(多) 2. 绝对路径) 注意: ./ 必须写上
模块文件的扩展名(后缀名)可以写,也可以不写
导出的模块一般需要使用一个变量来接收,一般把接收的量定义为常量
定义常量的名称和文件的名称保持一致(这个不是必须,大家都这么做)

二、模块里面this的指向问题

exports实际上是module.exports的引用,

在 nodejs 里面的 this 代表当前的这个模块,也就是 exports 对象

console.log(exports);   //{}
console.log(module.exports);  //{}
console.log(exports === module.exports);  //true  exports实际上是module.exports的引用

console.log('this', this); // this {}

console.log(this === exports);// true   // 在 nodejs 里面的 this 代表当前的这个模块,也就是 exports 对象  并且,交互模式下,没有exports这个对象
console.log(global === this );   //false    this不指向全局对象

三、nodejs中的内置模块

一般项目中模块分为3种,nodejs内置模块、自己书写的模块、第三方模块(使用一个专门的工具npm进行统一管理)

nodejs内置模块的文档网址:http://nodejs.cn/api/

1、path内置模块

const path = require("path");

console.log(__dirname); // 当前执行的文件绝对路径,不包含文件名

console.log(__filename);  // 当前执行的文件绝对路径,包含文件名

let extname = path.extname( __filename );   // 获取扩展名(后缀名)
console.log(extname);

let baseName = path.basename( __filename );  // 获取文件名(包含后缀名)
console.log(baseName);

let dirname = path.dirname(__filename);   //获取目录(路径)
console.log(dirname);

let parse = path.parse(__filename);  //获取路径字符串的对象
console.log(parse);

//路径的拼接操作 join
// join 默认相对路径的拼接 ,以当前操作系统路径分割符进行拼接
let fullPath1 = path.join('path.js');
// fullPath1 = path.join(__dirname,'path.js'); //带目录
// fullPath1 = path.join(__dirname,'a','path.js'); //带多级目录
console.log(fullPath1);

报错提示:看到 <Buffer .....  > 需要  toString()   才能看到里面的真实数据

2、fs文件系统模块

Node.js 的 API 内置有两个模块: path 和 fs ,我们使用 JavaScript 代码编写程序运行在 Node.js 环境中就可以操作文件

四、同步读取文件信息

同步读取:读取的时候,要等文件读取完毕后,才会执行后面的代码     (sync  同步)

const fs = require("fs");
const path = require("path");
let pathName = path.join(__dirname, 'hello.txt');

// const content = fs.readFileSync(pathName);   同步读取文件
// console.log(content);
// console.log(content.toString());

const content = fs.readFileSync(pathName, "utf-8");
console.log(content);

五、异步读取文件信息

不用等待文件读取完毕就会执行后面的代码。
 

const fs = require("fs");
const path = require("path");

let pathName = path.join(__dirname, "hello2.txt");
// console.log(file);
//参数1 要读取的文件
//参数2 设置读取到内容的编码,设置后读到的内容为字符串,如果不传则读到的数据为 buffer
//参数3 回调函数,读取完文件后执行的代码
fs.readFile(pathName, "utf-8",(error, data)=>{

    // console.log(error);
    // console.log(data);

   	if(error){
        console.log(error);
        return
    }

    console.log(data);
});

六、http模块

1、http核心模块的使用

四个步骤:

1、导入http模块  const http = require("http");

2、定义服务器程序端口 const port = 8080;

3、创建服务器对象

const server = http.createServer((request, response)=>{
    response.write("hello nodejs");  // 书写响应体内容
    response.end()   //发生响应到浏览器  当我们修改代码后,需要重新执行该文件,重启服务
});

4、调用服务器的监听方法,让服务器监听浏览器请求

server.listen(port,(error)=>{
    console.log(error);
    console.log(`server is running at port ${port}`);
});

注:

一个端口只能被一个服务进行使用,如果这个端口被某个服务使用,其他的服务不能在使用该端口的。这个时候出现端口冲突。如何解决?答:换个端口
建议:1-1024 端口(有些系统服务会使用这个范围的端口),不建议程序员自己使用。一般都使用 1024 以后的端口。

如果需要解决中文乱码,需遵循http协议:
response.setHeader("Content-type","text/html;charset=utf-8");

2、获取请求的一些信息

const url = require("url");

const server = http.createServer((request, response)=>{
    console.log("------------------------------");
    let requestUrl = request.url;  // 获取本次请求的资源路径
    console.log(requestUrl);

    let method = request.method;  // 获取本次请求的方式
    console.log(method);

    let obj = url.parse( requestUrl, true);
    console.log(obj.query);    // 获取get请求的查询字符串    
    //  localhost:8080?name=nodejs&age=11   get请求

    //当存在 post 提交数据 data 事件立马执行,postData就是提交过来的数据对象
    request.on('data',(postData) => {   // 获取post请求的请求参数
        console.log(postData.toString());
    });

    response.write("hello nodejs");  // 书写响应体内容
    response.end()   //发生响应到浏览器  当我们修改代码后,需要重新执行该文件,重启服务
});

3、书写一个web服务器

创建index.html和其他HTML文件。

const http = require("http");
const fs = require("fs");
const path = require("path");


const server = http.createServer((request, response)=>{

    let requestUrl = request.url;
    console.log(requestUrl);
    if(requestUrl==="/" || requestUrl==="/index.html"){
        let content = fs.readFileSync(path.join(__dirname,"assets","html","index.html"));
        response.end(content)
    }
    else if(requestUrl==="/login.html"){
        let content = fs.readFileSync(path.join(__dirname,"assets","html","login.html"));
        response.end(content)
    }
    else if(requestUrl.indexOf(".css") > -1){
        let content = fs.readFileSync(path.join(__dirname,"assets","css",requestUrl));
        response.end(content)
    }
    else if(requestUrl.indexOf(".js") > -1){
        let content = fs.readFileSync(path.join(__dirname,"assets","js",requestUrl));
        response.end(content)
    }
    else{
        response.end("404 NOt Fround:找不到该页面")
    }

});

const port = 8080;

server.listen(port,(error)=>{
    console.log(error);
    console.log(`server is running at port ${port}`);

});

七、npm简介

`npm` 全称为 `Node Package Manager`,是一个基于 `Node.js` 的包管理器,也是整个 `Node.js` 社区最流行、支持的第三方模块最多的包管理器。npm的初衷:JavaScript开发人员更容易分享和重用代码。

1. nodejs = ECMAScript + 核心模块
2. 自己遵循 commonjs 规范写出模块,如果写的是功能模块(日期处理datejs,数字处理numberjs)。如果可以把这些模块分享出来,以后谁要进行相关功能开发的时候,直接拿开发好的模块使用即可,没必要自己在开发。在互联网有一个网站专门收集这样的工具包。https://www.npmjs.cn/。
3. 如果我们要使用这个网站里面的包,则我们需要使用一个功能,叫做 npm。

官网:https://www.npmjs.cn/

https://www.npmjs.com/package/md5

npm可以用来:

- 允许用户获取第三方包并使用
- 允许用户将自己编写的包或命令行程序进行发布分享
 

1、安装

在命令提示框中全局安装:npm install npm --g

如果安装不顺利,检查自己是否是以管理员的身份运行的。

2、使用md5模块为例

1、项目目录下,执行命令 npm init,目录下会多一个package.json文件(这个文件1、记录项目相关信息,如项目名称,项目版本2、后期会记录项目中使用的第三方模块)

2、执行命令 npm install md5,这时候就会开始联网下载md5这个包

3、看见以下代码表示下载完成:

4、下载完就可以在项目中去导入然后使用了:

运行就会得到一个加密字符串。

八、nodemon包安装使用

前面使用node的http模块书写过web服务器,但是每次改写一点代码都需要重启服务器,开发不是很方便。nodemon可以监听代码的改动自动更新,不需要重启服务器程序就可以看效果。

命令提示框中全局安装

下载:npm install -g nodemon 

 -g  表示安装在全局,  这种安装方式不同于前面的安装,它只需要安装一次,就能一直使用。安装的时候会有一个专门的安装目录(安装完成会有提示安装位置,如果忘记了,可以通过npm root -g命令查看安装

这样即使是再修改代码就不用再重新启动服务器。

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值