Node.js 基础

Node 简介

Node.js 是基于Chrome V8引擎的 JavaScript 运行环境。(控制台终端执行)

官方网址:http://nodejs.org/zh-cn

NPM 使用介绍:

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

由于新版的nodejs已经集成了npm。同样可以通过输入 "npm -v" 来测试是否成功安装。

运行环境

浏览器是JavaScript的前端环境

 ②Node.js 是JavaScrip的后端环境

运用

Node  三大模块(内置模块)

        fs 文件系统模块 (操作文件)

//导入fs模块
const fs = require('fs');
 
//调用fs.redFile() 读取文件
//fs.readFile( path [,options], callback ) 
//参数1 读取文件路径
//参数2 读取编码格式,默认utf8  
//参数3 回调函数,获取失败成功结果 err  dataStr
fs.readFile('./flies/test.txt','utf8',function(err,dataStr){
    if(err)
        return console.log('读取文件失败'+err.message);
    console.log('读取文件成功:'+dataStr);
});
 
//调用fs.writeFile() 写入文件(可自动创建文件,不可创建路径。新内容会覆盖旧内容)
//fs.writeFile( file,data[,options], callback ) 
//参数1 写入文件路径
//参数2 写入文件内容
//参数3 读取编码格式,默认utf8  
//参数4 回调函数,获取失败成功结果 err
fs.writeFile('./flies/testW.txt','TEST_FS_WRITE','utf8',function(err){
    if(err)
        return console.log('写入文件失败'+err.message);
    else
        console.log('写入文件成功!');
});
 
//fs模块 路径动态拼接问题(相对路径)
//原因:代码运行时,会执行 node 命令时所在目录,动态拼接出被操作文件的完整路径
//处理:提供完整文件存储路径

path 路径模块(处理路径)

//导入path模块
const path = require('path');
var fPath = '/a/b/c/index.html';
 
//路径拼接
//path.join() 拼接多个路径成完整路径字符串
var pathStr = path.join('/a','/b/c','../','./d','e');
console.log(pathStr);   //输出 \a\b\d\e    ../会抵消前一个路径
 
var pathStr1 = path.join(__dirname,'/files/1.tex');
console.log(pathStr1);   //输出 当前所在目录 \files\1.tex
 
//获取路径中的文件名
//path.basename( path  [,ext] ) 
//参数1 表示文件路径
//参数2 表示文件扩展名
//返回 路径中最后一部分
var fullName = path.basename(fPath);
var namewithouExt = path.basename(fPath,'.html');
console.log('fullName:'+fullName); 
console.log('namewithouExt:'+namewithouExt);
 
//获取文件扩展名
//path.extname(path)
//参数1 表示文件路径
//返回 路径中最后一部分
var extName = path.extname(fPath);
console.log('extName:'+extName);

 

综合案例:HTML 、CSS 、JS 的拆解

//导入模块
const fs = require('fs');
const path = require('path');
var fliePathStr = './flies/index.html'; //目标路径
 
//定义正则表达式,分配<style> <script> 标签
var regStyle = /<style>[\s\S]*<\/style>/;       //匹配所有
var regScript =/<script>[\s\S]*<\/script>/;     //匹配所有
 
//读写文件
fs.readFile(path.join(__dirname,fliePathStr),'utf8',function(err,dataStr){
    if(err)
        return console.log('读取文件失败:'+err.message);
    //console.log('读取文件成功:'+dataStr);
    
    //调用方法拆解css,js,html文件
    resolvCSS(dataStr);
    resolvJS(dataStr);
    resolvHTML(dataStr);
});
 
 
//拆解CSS
function resolvCSS(htmlStr)
{
    //正则表达式,提取内容
    var tmpR = regStyle.exec(htmlStr);  
    //console.log(tmpR);
    //替换 操作
    if(tmpR.length>0)
    {
        var newCSS = tmpR[0].replace('<style>','').replace('</style>','');
        //console.log(newCSS);
        //写文件
        fs.writeFile(path.join(__dirname,'./Clock/index.css'),newCSS,'utf8',function(err){
            if(err)
                return console.log('写入CSS文件失败'+err.message);
            console.log('写入CSS文件成功');
        });
    }
}
 
//拆解JS
function resolvJS(htmlStr)
{
    //正则表达式,提取内容
    var tmpR = regScript.exec(htmlStr);  
    //console.log(tmpR);
    //替换 操作
    if(tmpR.length>0)
    {
        var newJS = tmpR[0].replace('<script>','').replace('</script>','');
        //console.log(newCSS);
        //写文件
        fs.writeFile(path.join(__dirname,'./Clock/index.js'),newJS,'utf8',function(err){
            if(err)
                return console.log('写入JS文件失败'+err.message);
            console.log('写入JS文件成功');
        });
    }
}
 
//拆解HTML
function resolvHTML(htmlStr)
{
    var newHTML = htmlStr;
    // <style> 和 <script> 替换为 外联的 <link> 和 <script> 表签
    newHTML = newHTML.replace(regStyle,'<link rel="stylesheet" href="./index.css"/>');
    newHTML= newHTML.replace(regScript,'<script src="./index.js"></script>');
 
    //写文件
    fs.writeFile(path.join(__dirname,'./Clock/index.html'),newHTML,'utf8',function(err){
        if(err)
            return console.log('写入HTML文件失败'+err.message);
        console.log('写入HTML文件成功');
    });
}

 

http模块( 创建Web服务器模块 )

在Node.js 中,不需要使用 IIS、Apache 等第三方Web服务器软件。

基于Node.js提供的  http模块,可以实现生成服务器软件,对外提供Web服务。

//导入http模块
const http = require('http');
 
//创建 Web 服务器实例
var server = http.createServer();
 
//为服务器实例绑定request 事件,监听客户端的请求
server.on('request',function(req,res){
    //req请求对象(访问与 客户端 相关的数据或属性) 
    //req.url  客户端请求 URL 地址
    //req.method 客户端 method 请求类型 
    var url = req.url;
    var content = '<h1>404 Not found!</h1>';
 
    //根据不同url响应对应html内容
    if(url === '/' || url === '/index.html'){
        //访问首页
        content = '<h1>首页</h1>';
    }
    //res响应对象(访问与 服务器 相关的数据或属性)
    //res.end  向客户端发送指定内容并结束这次请求处理
    //解决 中文乱码 问题  设置响应头 Content-Type 为 text/html;charset=utf-8
    res.setHeader('Content-Type','text/html;charset=utf-8');
    var strInfo = 'WebServer 服务器正在被访问;URL地址:'+req.url+'; Method类型:'+req.method;
    console.log(strInfo);
    res.end(content);
});
 
//启动服务器
server.listen(8080,function(){
    console.log('Server running at http://127.0.0.1:8080.');
});

项目部署案例:

//导入模块
const fs = require('fs');
const path = require('path');
const http = require('http');
 
//创建 Web 服务器实例
var server = http.createServer();
 
//为服务器实例绑定request 事件,监听客户端的请求
server.on('request',function(req,res){
    var url = req.url;
    //res.setHeader('Content-Type','text/html;charset=utf-8');  //会影响样式编码
    var content = '<h1>404 Not found!</h1>';
 
    //URL 映射为文件储存路径(路径优化)
    //var urlPath = path.join(__dirname,url);
    var urlPath = '';
    if(url === '/')
        urlPath = path.join(__dirname,'./Clock/index.html');
    else
        urlPath = path.join(__dirname,'./Clock',url);
 
    //读取文件
    fs.readFile(urlPath,'utf8',function(err,dataStr){
        if(err)
            return res.end(content);
        res.end(dataStr);
    });
});
 
//启动服务器
server.listen(8080,function(){
    console.log('Server running at http://127.0.0.1:8080.');
});

Node 模块分类

  • 内置模块(由Node.js官方提供,例如:fs、path、http等)
  • 自定义模块(由用户创建的 js 文件)
  • 第三方模块(由第三方提供,使用前需要下载)

使用  require()  方法加载模块。(自定义模块需要文件路径;加载模块时,会执行模块中代码)

模块作用域

自定义模块中定义的  变量、方法等成员,只能在当前模块内被访问

  • module对象:存储和当前模块有关属性。
  • module.exports对象:将模块内成员共享,供外界使用。(require() 所指对象)
  • exports对象:exports 与 module.exports 指向的是统一对象。

使用误区:

模块加载机制

模块在第一次加载后会被缓存。多次 requrie()  不会被多次执行。(优先从缓存中加载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BC菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值