NodeJs快速入门

2023-10-27

NodeJs入门介绍

Node.js是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。
所以 语法还是JavaScript的语法,只不过它封装了一些类库,可以更多的事。

nodejs官网

在命令行中,可以使用node

常用命令:

1.node -v,查看电脑安装的node版本

2.node,进入node的环境,可以执行你写的js代码

3.在node环境下,使用ctrl+c 或者输入[.exit],退出node环境

4.node *.js,执行某个js文件

5.cd,进入到某个文件夹

6.pwd,显示当前文件夹的路径

7.ls,显示当前文件夹内的文件

node.js:称node或nodejs,可以运行在服务器端的的js平台。

前端的js后服务器端的js区别:

1.前端的js,浏览器就是解析器;服务器端的js,node.js是平台,是解析器

2.前端的js,主要的功能DOM操作;服务器端的js,主要功能是搭建服务器,提供数据

3.服务器端的js,去掉了与DOM操作的相关的内容,没有兼容性问题。

webstorm工具支持运行js,快捷键 ctl+shift+r
退出webstrom工具运行js的平台快捷键 shift+esc

NodeJs之package包

多个模块组合在一起,就形成了包(package)
包就是一个文件夹,在文件夹中包含了多个文件(模块)
包结构如图

例如,一个人(包含头和身体)

包的使用步骤

body.js

//创建身体
exports.create = function () {
    return "body";
}

head.js

//创建头
exports.create = function () {
    return "head";
}

main.js

var head = require("./head.js");
var body = require("./body.js");
//把身体和头部组合在一起
exports.create = function () {
    return {
        head: head.create(),
        body: body.create()
    }
}

package.js是使用npm配置时自动生成的json文件,下面会说到

当前文件 04-package.js与person文件夹同级

方式1

var main = require("./person/main.js");
var person = main.create();
console.log(person);

方式2:配置包的入口(main.js)

npm:node package manager,命令行工具,在安装nodejs环境的时候,已经附带安装了npm

使用npm来配置包的信息(npm init),其中

name:包的名字

entry point:包的入口

注意:npm init会在当前目录中生成package.json文件,用于记录输入的信息

var person = require("./person");
console.log(person.create());

npm配置包信息步骤,使用webstorm终端

1.进入到包文件夹

2.npm init(命令行工具初始化)

3.name:(person) person代表包文件夹名

4.version:(1.0.0) 默认版本号为1.0.0

5.description:对于包的描述,例如:创建一个人对象

6.entry point:(main.js),组合模块的js文件

7.test command:无

8.git repository:github adress github地址

9.keywords:创建对象

10.author:作者

11.license:(ISC):这个ISC许可证是一个宽松的自由软件许可证写的互联网系统协会(ISC)

NodeJs之模块

模块: 把一些通用的代码写到不同的 js 文件中, 每一个文件就是一个模块

创建模块

以下的方法只能在模块内使用

var name;
function setName(aName) {
    name = aName;
}
function getName() {
    return name;
}

如果想在模块外部使用, 需要配合 exports 对象来实现

exports 对象特征

1. 空对象

console.dir(exports);

2. 可以为对象添加属性和方法

exports.age = 10;
console.dir(exports);
exports.age = 10;
console.dir(exports);

利用 exports 对象的第二个特性, 把方法和属性添加到 exports 对象上

新建文件 03-module.js 文件, 文件内容如下:

exports.setAge = function (aAge) {
    this.age = aAge;
}
exports.getAge = function () {
    return this.age;
}
console.dir(exports);

3. 在其他文件中使用 require 来获取 exports 对象

新建 use-module.js 文件

使用模块, 步骤如下:

1. 获取 exports 对象, 导入模块: require(“路径”); 可以省略 js 后缀

var module = require("./03-module.js");

2. 使用模块

console.log(module);
//设置年龄,获取年龄
module.setAge(123);
var age = module.getAge();
console.log(age);
console.log(module);

//设置年龄,获取年龄
module.setAge(123);
var age = module.getAge();
console.log(age);

重复导入, 获取的模块都是同一个 exports 对象

var module1 = require("./03-module.js");
module1.setAge(321);
var age = module.getAge();
console.log(age);
var module1 = require("./03-module.js");
module1.setAge(321);
var age = module.getAge();
console.log(age);

Node之http模块

Node.js: 内部支持http服务环境

// 导入http模块
var http = require("http");
//创建服务,并监听某个端口
/*参数说明
req:request,客户端的请求
res:response,服务器的响应
*/
http.createServer(function(req,res){
    //当客户端访问时执行
    //设置响应头,响应状态码和返回内容的格式和编码
    res.writeHead(200,{
        'Content-type':'text/html;charset=utf-8'
    });
    //设置响应内容,可以设置多次
    res.write("<p>你好世界</p>");
    res.write("<p>hello,world!</p>");
    //响应结束并返回内容
    res.end("<h1>可可</h1>");
}).listen(3000);
console.log("服务器已经启动,并且开始监听3000端口");

注: js 中的代码修改后, 需要再次运行才能生效
再次运行的快捷键 ctrl+r

NodeJs之Path模块

注意: cmd+左键, 点击模块名, 进入模块声明部分

//导入系统的模块path,用于对文件路径进行处理
var path = require("path");
//格式化文件路径
var pathString = "./a//b/c/../d";
var str = path.normalize(pathString);
console.log(str);
//文件路径拼接,并规范化输出路径
var str = path.join("./","/a","//b","c","../","d");
console.log(str);
//__dirname:获取当前目录的绝对路径
console.log(__dirname);
var str = path.join(__dirname,"01-info.js");
console.log(str);
//判断是否是绝对路径
//注:判断以路径的开头为准,以斜杠开头的都是绝对路径
var result = path.isAbsolute('./a/b');
console.log(result);
var result = path.isAbsolute('../a/b');
console.log(result);
var result = path.isAbsolute('a/b');
console.log(result);
var result = path.isAbsolute('/a/b');
console.log(result);
var result = path.isAbsolute('/a/../b');
console.log(result);
//把相对路径转换成绝对路径
//1.默认以根目录作为起点
var str = path.resolve("a/b");
console.log(str);
var str = path.resolve("01-info.js");
console.log(str);
var str = path.resolve("/a");
console.log(str);
var str = path.resolve("./a");
console.log(str);
var str = path.resolve("../a");
console.log(str);
//2.以指定的路径开始
var str = path.resolve("/a","b");
console.log(str);
var str = path.resolve("a","b");
console.log(str);
//获取从 绝对路径1到绝对路径2 的相对路径
var str = path.relative("/a/b/c","/a/d/e");
console.log(str);
//获取当前文件所在的目录
var str = path.dirname();
console.log(str);
var str = path.dirname("a");
console.log(str);
var str = path.dirname("/a");
console.log(str);
var str = path.dirname("/a/b/c/d.txt");
console.log(str);
//获取路径的最后一部分
var str = path.basename("/a/b/c/d.txt");
console.log(str);
var str = path.basename("/a/b/c/index.html");
console.log(str);
var arr = str.split(".");
console.log(arr[0]);
//指定文件后缀,来获取文件名
var str = path.basename("/a/b/c/1.2.3.index.html",".html");
console.log(str);
//获取文件的后缀名(扩展名)
var str = path.extname("/a/b/c/1.2.3.index.html");
console.log(str);
//练习:写一个函数,提供文件路径,返回获取的文件名
function getFileName(pathString){
    return path.basename(pathString,path.extname(pathString));
}
console.log(getFileName("a/b/1.txt"));
console.log(getFileName("a/b/2.html"));
function getFileName2(pathString) {
    return path.parse(pathString).name;
}
console.log(getFileName2("a/b/1.txt"));
console.log(getFileName2("a/b/2.html"));
//路径解析(字符串转对象)
var obj = path.parse('/home/user/dir/file.txt');
console.dir(obj);
//路径编码(对象转字符串)
var str = path.format(obj);
console.log(str);

NodeJs之URL模块

//导入url模块
var url = require("url");
var urlString = "http://www.baidu.com/a/b";
//url的解析
var obj = url.parse(urlString);
console.log(obj);
var urlString = "http://user:password@www.baidu.com:8080/a/b?c=d&e=f#abc";
var obj = url.parse(urlString,true);
console.log(obj);
console.log(obj.protocol);//协议,http:
console.log(obj.slashes);//协议后是否有双斜杠,true
console.log(obj.auth);//认证或授权,user:password
console.log(obj.host);//主机名(包含端口号) www.baidu.com:8080
console.log(obj.port);//端口号,8080
console.log(obj.hostname);//主机名 www.baidu.com
console.log(obj.hash);//锚点名称,#abc
console.log(obj.search);//查询的内容(以?开头),?c=d&e=f
console.log(obj.query);//查询内容, c=d&e=f ,当parse的第二个参宿为true时,会将query解析为对象{ c: 'd', e: 'f' }
console.log(obj.pathname);//路径名, /a/b
console.log(obj.path);//把pathname和search组合起来,  /a/b?c=d&e=f
console.log(obj.href);//完整的链接地址,http://user:password@www.baidu.com:8080/a/b?c=d&e=f#abc
//当第三个参数为true时,会把路径//后的内容作为主机名
var urlString ="//foo/bar";
var obj = url.parse(urlString,true,true);
console.log(obj);
//url的编码
var obj = {
    protocol: "http:",
    host: "127.0.0.1:8080",
    pathname: "/a/b",
    search: "c=d"
}
var str = url.format(obj);
console.log(str);
//路径修改
//url.resolve(原路径,修改路径);
var str = url.resolve("/one/two/three","four");
console.log(str);
var str = url.resolve("/one/two/three","/four");
console.log(str);
var str = url.resolve("http://www.baidu.com","/one");
console.log(str);

NodeJs之util模块

//导入util模块
var util = require("util");
function Person(name,age){
    this.name = name;
    this.age = age;
    this.play = function(){
        console.log("玩");
    }
}
Person.prototype.sayHi = function () {
    console.log("hi");
}
function Girl(name,age,gender) {
    Person.call(this,name,age);
    this.gender = gender;
}
//util.inherits(子类,父类),只能继承原型上的方法
util.inherits(Girl,Person);
var girl = new Girl("熊爱华",28,"女");
girl.sayHi();
girl.play();
//打印对象
console.log(girl.name);
console.log(girl.age);
console.log(girl.gender);
//"我叫小花,今年18啦,性别女"
console.log("我叫"+girl.name+",今年"+girl.age+"啦,性别"+girl.gender);
console.log("我叫%s,今年%d岁啦,性别%s",girl.name,girl.age,girl.gender);
//util.inspect(对象),把对象转换成字符串
console.log(girl);
//第二个参数,是否显示不可枚举的属性
console.log(util.inspect(girl,true));
//第三个参数,格式化对象时,递归的层数
console.log(util.inspect(girl, true, 1));
//第四个参数,是否显示颜色
console.log(util.inspect(girl, true, 1,true));
//类型判断
console.log(typeof 123);
console.log(typeof '123');
console.log(typeof true);
console.log(typeof []);
console.log(typeof {});
console.log(typeof /\d/);
console.log(typeof function () {});
//借助工具模块判断
console.log(util.isArray([]));
console.log(util.isDate(new Date()));
console.log(util.isRegExp(/\d/));

NodeJs之event模块

//导入events模块
var events = require("events");
//事件:观察者模式
var eventEmitter = new events.EventEmitter;//事件监听器
//注册事件
eventEmitter.on("abc",function () {
    console.log("执行事件abc");
});
eventEmitter.addListener("cba",function () {
    console.log("执行事件cba");
});
eventEmitter.on("hi",function (name) {
    console.log("hi" + name);
});
eventEmitter.once("only",function () {
    console.log("执行only");
});
//触发事件
eventEmitter.emit("abc");
eventEmitter.emit("abc");
eventEmitter.emit("cba");
eventEmitter.emit("hi",' 大龙');
eventEmitter.emit("only");
eventEmitter.emit("only");
//移除事件
function demo() {
    console.log("demo")
}
eventEmitter.addListener("demo",demo);
eventEmitter.emit("demo");
eventEmitter.removeListener("demo",demo);
//移除后执行,没有响应
eventEmitter.emit("demo");
//移除所有事件
eventEmitter.removeAllListeners("abc");
eventEmitter.emit("abc");
//设置最大的监听数量
eventEmitter.setMaxListeners(2);
eventEmitter.on("hello",function () {
    console.log("hello");
});
eventEmitter.on("hello",function () {
    console.log("hello2");
});
eventEmitter.on("hello",function () {
    console.log("hello3");
});
eventEmitter.emit("hello");

events-example(事件例子):

var events = require("events");
var util = require("util");
//女孩类
function Girl() { 
}
//女孩类继承事件类(让女孩具备事件监听的方法)
util.inherits(Girl,events);
//男生类
function Boy(name,callback){
    this.name = name;
    this.callback = callback;
}
var boy1 = new Boy("小龙",function () {
    console.log("小龙带着锅");
});
var boy2 = new Boy("小菜",function () {
    console.log("小菜带着菜");
});
var boy3 = new Boy("小三",function () {
    console.log("小三带着料");
});
var girl = new Girl();
girl.setMaxListeners(3);
girl.on("eat",boy1.callback);
girl.on("eat",boy2.callback);
girl.addListener("eat",boy3.callback);
girl.emit("eat");
girl.once("die",function () {
    console.log("扑街!");
});
girl.emit("die");
//可以省略EventEmitter
var event = new events;
event.on("abc",function () {
    console.log("执行abc");
});
event.emit("abc");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJs快速入门 的相关文章

随机推荐

  • JQuery突出显示效果

    示例 突出显示效果
  • 最新Python爬虫有道翻译JS逆向解析详细介绍版,附源码

    我的第一篇文章 写的很详细 这里方便刚接触爬虫帅哥们理解 大家一起加油 前两步为js的逆向分析过程 了解过程的请跳到第三步 源码 最后打包成exe文件 有道翻译网址 在线翻译 有道 第一步 找到有道翻译发送请求的Url地址 老规矩进去界面F
  • 从方法到目标了解什么是机器学习?

    一 什么是机器学习 1 简述 机器学习是 人工智能 AI 和计算机科学的一个分支 专注于利用数据和算法来模仿人类的学习方式 逐步提高其准确性 过去几十年来 存储和处理能力方面的技术进步催生了一些基于机器学习的创新产品 例如 Netflix
  • NodeJs快速入门

    NodeJs入门介绍 Node js是一个Javascript运行环境 runtime 实际上它是对Google V8引擎进行了封装 所以 语法还是JavaScript的语法 只不过它封装了一些类库 可以更多的事 nodejs官网 在命令行