nodejs入门

nodejs入门

nodejs概念

Node.js,是一个可以让 JavaScript 运行在服务器端的运行环境。它可以让 JavaScript 脱离浏览器的束缚,就像运行 Python、Perl、PHP、Ruby 程序一样,我们可以用 Node.js 轻松地进行服务器端应用开发,Python、Perl、PHP、Ruby 能做的事情,Node.js 几乎都能做,而且可以做得更好。

nodejs能做什么

  • 具有复杂逻辑的网站
  • 基于社交网络的大规模 Web 应用
  • Web Socket 服务器
  • TCP/UDP 套接字应用程序
  • 命令行工具
  • 交互式终端程序
  • 带有图形用户界面的本地应用程序
  • 单元测试工具
  • 客户端 JavaScript 编译器

CommonJs模块规范

CommonJs是一个模块规范,而nodeJs是一个环境,是一个具体的实现

在nodejs中每一个js文件就是一个模块,每一个模块都有自己的命名,不会互相干扰,如果在一个html中引入两个js,这两个js中都有相同的命名,这个就会报错,但是在nodejs中就不会报错

概念

Node.js 是目前 CommonJS 规范最热门的一个实现,它基于 CommonJS 的 Modules/1.0 规范实现了 Node.js 的模块,同时随着 CommonJS 规范的更新,Node.js 也在不断跟进。由于目前 CommonJS 大部分规范还在起草阶段,Node.js 已经率先实现了一些功能,并将其反馈给 CommonJS 规范制定组织,但 Node.js 并不完全遵循 CommonJS 规范。这是所有规范制定者都会遇到的尴尬局面,因为规范的制定总是滞后于技术的发展。

特点
  • 所有代码运行在当前模块作用域中,不会污染全局作用域
  • 模块同步加载,根据代码中出现的顺序依次加载
  • 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
用法

在这里插入图片描述
在这里插入图片描述

引入模块
//引入foo函数,用一个变量接收
//如果引入当前项目的模块,必须在路径前加上./或者../
//如果引入第三方或者官方模块,直接写模块名
const cs2 = require("指定导入模块的路径");
//引入解构函数
//导入多个模块可以用解构的方法
const {fn,fn1,fn2} = require("./index1");
导出模块
//导出模块中foo函数
module.exports.foo = foo;
//对象引入多个函数,但是不能和上面的一起用不然会覆盖上面的导出模块
module.exports = {
    fn:fn,fn1:fn1,fn2:fn2
    //如果变量和值相同的话可以直接写变量名
    //fn,fn1,fn2
}
//可以直接用exports导出,但是不能用对象导出多个函数,会报错
//exports是module.exports默认对象的引用而已,不能直接给exports复制,否则它将不具备导出模块的功能
exports.f4 = f4;

npm常用命令

概念

NPM,英文全称 Node Package Manger,翻译成中文就是 Node 的包管理工具。因为我们在使用 Node.js 进行开发时,会用到很多别人写的 JavaScript 代码。如果我们要使别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到 NPM 官网上,如果要使用,直接通过 NPM 安装就可以直接用,不用管代码存在哪,应该从哪下载。更重要的是,如果我们要使用模块 A,而模块 A 又依赖于模块 B,模块 B 又依赖于模块 X 和模块 Y,NPM 可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

常用命令

初始化项目

npm init

设置淘宝镜像

npm config set registry=https://registry.npm.taobao.org

本地安装

npm install

把下载的东西放在dependencies里面–save

npm i lodash --save

全局安装

npm install -g

卸载安装的

npm c

NOdeJs内置模块

global:
  • console

  • __dirname

    //当前文件所在目录的完整路径
    console.log("dirname",__dirname);
    
  • __filename

    //当前文件的完整路劲
    console.log("filename",__filename);
    
  • os

    //获取当前计算机的cpu信息
    const os = require("os");
    console.log("cpus:",os);
    
  • module

path:路径
const path = require("path");
  • basename

    //获取路劲中最后一级的路劲名称
    console.log("basename:",path.basename("/a/b/c/d/e.js"));  //e.js
    console.log("basename:",path.basename("/a/b/c/d/e"));     // e
    
  • dirname

    //获取最后一级路劲父目录
    console.log("dirname:",path.dirname("/a/b/c/d/e/f.js"));   ///a/b/c/d/e
    
  • extname

    //获取文件扩展名
    console.log("extname:",path.extname("/a/b/c/d/e/f.js"));   //.js
    
  • join

    //将多级路径连接成完整路径
    console.log("join:",path.join("/a","/b","/c","/d"));    // \a\b\c\d
    console.log("join:",path.join("/a","/b","/c","../d"));   //\a\b\d
    
fs:文件的写入

**IO操作和磁盘打操作:input onput **

加了Sync的就是同步方法,不加Sync的就是异步方法

//引入fs
const fs = require("fs");
  • writeFile(异步)

    创建一个文件并写入内容,如果里面有这个文件,就会覆盖,没有这个文件就新建一个

    //创建一个文件,在当前文件之下,如果你输入的地址不对,他就会报错
    fs.writeFile("./1.txt","啊啊啊,大傻逼",function(err){
        if(err){
            console.log(err);
            return;
        }
        console.log("文件写入成功");
    })
    
  • appendFile

    在创建的文件里面新加内容

    //在创建的文件里面加入内容
    fs.appendFile("./1.txt","当然不是啦",function(err){
        if(err){
            console.log(err);
            return;
        }
        console.log("文件再次写入成功");
    })
    
  • writeFileSync

    //写文件(同步)
    fs.writeFileSync("./2.txt", "你好啊,小朋友");
    
  • readFile

    //读文件(异步)
    fs.readFile("./1.txt", function (err, data) {
        if (err) {
            console.log(err);
            return;
        }
        console.log("data:", data.toString());
    });
    
  • readFileSync

  • copyFile

    复制文件

  • copyFileSync

  • mkdir

    异步创建目录

  • mkdirSync

  • rm

    删除文件和目录

url
  • new URL()

    //创建一个地址
    let url = new URL("http://192.168.1.100:8080/a/b/c?name=eee&age=18#hash");
    
  • protocol

    console.log("protocol:",url.protocol);   //protocol: http:
    
  • hostname

    console.log("pathname:",url.pathname);   //hostname: 192.168.1.100
    
  • port

    console.log("port:",url.port);     //port: 8080
    
  • pathname

    console.log("pathname:",url.pathname);     //pathname: /a/b/c
    
  • search

    console.log("search:",url.search);    //search: ?name=eee&age=18
    
  • hash

    console.log("hash:",url.hash);    //hash: #hash
    
  • searchParams

    console.log("searchParams:",url.searchParams);
    //searchParams: URLSearchParams { 'name' => 'eee', 'age' => '18' }
    
    • new URLSearchParams()

      //获取一个URLSearchParams对象
      let searchParams = new URLSearchParams(url.search);
      console.log("获取数据",url.searchParams);
      //获取数据 URLSearchParams { 'name' => 'eee', 'age' => '18' }
      
    • set()

      //修改或添加属性
      searchParams.set("name","zzz");
      searchParams.set("gender","man");
      console.log("添加或修改的属性",searchParams);
      //添加或修改的属性 URLSearchParams { 'name' => 'zzz', 'age' => '18', 'gender' =man}
      
    • delete()

      //删除指定的属性
      searchParams.delete("age");
      
    • toString()

      //将查询参数对象转换成查询字符串
      console.log("转换成字符串",searchParams.toString());   //转换成字符串 name=zzz&gender=man
      
http
  • createServer
  • lister
  • request
  • respose
const http = require('http');
//创建服务器
//req,res:req请求,res响应
let server = http.createServer(function(req,res){
    console.log("服务器处理用户的请求");
    //也可以在write里面写html代码
    // res.write("hello word1111111111");
    res.write(
        `
            <html>
                <head>
                    <meta charset="utf-8">
                    <title>node.js</title>
                </head>
               <body>
                    <h1>你好,大院中</h1>
                </body>
            </html>
        `
    )
    res.end();
});
//启动服务器并打开监听端口
server.listen(3000);
console.log("服务器启动成功");

用fs导入html文件输出

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

//创建服务器
//req,res:req请求,res响应
let server = http.createServer(function(req,res){
    console.log("服务器处理用户的请求");
    console.log(req.url);
    let url = req.url;
    if(url == "/"){
        url = "index.html"
    }
    //用fs导入
    fs.readFile(path.join('./public',url),function(err,data){
        if(err){
            console.log(err);
            res.end();
            return;
        }
        res.write(data);
        res.end();
    })
  
});
//启动服务器并打开监听端口
server.listen(3000);
console.log("服务器启动成功");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值