NodeJs

Nodejs介绍

Node.js是一个Javascript运行环境(runtime)。它让JavaScript可以开发后端程序,它几乎能实现其他后端语言能实现的所有功能。
  • Nodejs是基于GoogleV8引擎,V8引擎是Google发布的一款开源的JavaScript引擎,原来主要用于Chrome浏览器的JS解释部分,但是RyanDahl这哥们,鬼才般的,把这个V8引擎搬到了服务器上,用于做服务器的软件。
    Nodejs官网
    Npm包管理

1、Node.js创建第一个应用

  1. 引入http模块/创建服务器

    varhttp=require('http');
    http.createServer(function(request,response){
    //发送HTTP头部
    //HTTP状态值:200:OK
    //设置HTTP头部,状态码是200,文件类型是html,字符集是utf8
    response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
    //发送响应数据"HelloWorld"
    res.end("哈哈哈哈,我买了一个iPhone"+(1+2+3)+"s");
    }).listen(8888);
    //终端打印如下信息
    console.log('Serverrunningathttp://127.0.0.1:8888/');
    
  2. 运行程序
    node xxx.js

  3. 浏览器访问
    在这里插入图片描述

2、HTTP模块、URL模块

Node.js中,将很多的功能,划分为了一个个module(模块)。Node.js中的很多功能都是通过模块实现。

1. HTTP模块的使用
//引用模块
varhttp=require("http");
res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});
//设置一个响应头:
//创建一个服务器,回调函数表示接收到请求之后做的事情
varserver=http.createServer(function(req,res){
//req参数表示请求,res表示响应
console.log("服务器接收到了请求"+req.url);
res.end();//End方法使Web服务器停止处理脚本并返回当前结果
});
//监听端口
server.listen(3000,"127.0.0.1");
2. URL模块的使用
>url.parse()解析URL
url.format(urlObject)//是上面url.parse()操作的逆向操作
url.resolve(from,to)添加或者替换地址
3. Nodejs自启动工具supervisor
  • 首先安装:npminstall-gsupervisor
  • 使用supervisor代替node命令启动应用:supervisor xxxx.js
4. CommonJs

CommonJS是模块化的标准,nodejs是CommonJS(模块化)的实现。

  • 我们可以把公共的功能抽离成为一个单独的js文件作为一个模块,默认情况下面这个模块里面的方法或者属性,外面是没法访问的。如果要让外部可以访问模块里面的方法或者属性,就必须在模块里面通过exports或者module.exports暴露属性或者方法。
  • 在需要使用这些模块的文件中,通过require的方式引入这个模块。这个时候就可以使用模块里面暴露的属性和方法。

在这里插入图片描述

  • 自定义 模块
//定义一个tools.js的模块
//模块定义
vartools={
sayHello:function(){
return
'
helloNodeJS';
},
add:function(x,y){
returnx+y;
}
};
//模块接口的暴露
//module.exports=tools;
exports.sayHello=tools.sayHello;
exports.add=tools.add;
varhttp=require('http');
//引入自定义的tools.js模块
vartools=require('./tools');
tools.sayHello();//使用模块
5. 安装淘宝镜像
npm install-gcnpm--registry=https://registry.npm.taobao.org
6. Nodejs中的fs模块的使用
  1. fs.stat检测是文件还是目录

    constfs=require('fs')
    fs.stat('hello.js',(error,stats)=>{
    if(error){
    console.log(error)
    }else{
    console.log(stats)
    console.log(`文件:${stats.isFile()}`)
    console.log(`目录:${stats.isDirectory()}`)
    }
    })
    
  2. fs.mkdir创建目录

    constfs=require('fs')
    fs.mkdir('logs',(error)=>{
    if(error){
    console.log(error)
    }else{
    console.log('成功创建目录:logs')
    }
    })
    
  3. fs.writeFile创建写入文件

    fs.writeFile('logs/hello.log','您好~\n',(error)=>{
    if(error){
    console.log(error)
    }else{
    console.log('成功写入文件')
    }
    })
    
  4. fs.appendFile追加文件

    fs.appendFile('logs/hello.log','hello~\n',(error)=>{
    if(error){
    console.log(error)
    }else{
    console.log('成功写入文件')
    }
    })
    
  5. fs.readFile读取文件

    constfs = require("fs");
    fs.readFile("logs/hello.log", "utf8", (error, data) => {
      if (error) {
        console.log(error);
      } else {
        console.log(data);
      }
    });
    
  6. fs.readdir读取目录

    constfs=require('fs')
    fs.readdir('logs',(error,files)=>{
    if(error){
    console.log(error)
    }else{
    console.log(files)
    }
    })
    
  7. fs.rename重命名

    constfs=require('fs')
    fs.rename('js/hello.log','js/greeting.log',(error)=>{
    if(error){
    console.log(error)
    }else{
    console.log('重命名成功')
    }
    })
    
  8. fs.rmdir删除目录

    fs.rmdir('logs',(error)=>{
    if(error){
    console.log(error)
    }else{
    console.log('成功的删除了目录:logs')
    }
    })
    
  9. fs.unlink删除文件

    fs.unlink(`logs/${file}`,(error)=>{
    if(error){
    console.log(error)
    }else{
    console.log(`成功的删除了文件:${file}`)
    }
    })
    
  10. fs.createReadStream从文件流中读取数

    constfs=require('fs')
    varfileReadStream=fs.createReadStream('data.json')
    letcount=0;
    varstr=
    ''
    ;
    fileReadStream.on('data',(chunk)=>{
    console.log(`${++count}接收到:${chunk.length}`);
    str+=chunk
    })
    fileReadStream.on('end',()=>{
    console.log('---结束---');
    console.log(count);
    console.log(str);
    })
    fileReadStream.on('error',(error)=>{
    console.log(error)
    })
    
  11. fs.createWriteStream写入文件

    varfs=require("fs");
    vardata='我是从数据库获取的数据,我要保存起来';
    //创建一个可以写入的流,写入到文件output.txt中
    varwriterStream=fs.createWriteStream('output.txt');
    //使用utf8编码写入数据
    writerStream.write(data,'UTF8');
    //标记文件末尾
    writerStream.end();
    //处理流事件-->finish事件
    writerStream.on('finish',function(){/*finish-所有数据已被写入到底层系统时触发。*/
    console.log("写入完成。");
    });
    writerStream.on('error',function(err){
    console.log(err.stack);
    });
    console.log("程序执行完毕");
    
7. 管道流

管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

varfs=require("fs");
//创建一个可读流
varreaderStream=fs.createReadStream('input.txt');
//创建一个可写流
varwriterStream=fs.createWriteStream('output.txt');
//管道读写操作
//读取input.txt文件内容,并将内容写入到output.txt文件中
readerStream.pipe(writerStream);
console.log("程序执行完毕");

3、路由

路由(Routing)是由一个URI(或者叫路径)和一个特定的HTTP方法(GET、POST等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。

const http = require('http');
const path = require('path');
const url = require('url');
const routes = require('./module/routes');

http.createServer(function (req, res) {   
    //创建静态web服务
    routes.static(req,res,'static');
    //路由
    let pathname=url.parse(req.url).pathname;
    let extname = path.extname(pathname);
    if(!extname){ //如果有请求地址有后缀名的话让静态web服务去处理 
        if(pathname=='/login'){
            res.end("执行登录");
        }else if(pathname=='/register'){
            res.end("执行注册");
        }else if(pathname=='/admin'){
            res.end("处理后的业务逻辑");
        }else{
            res.end("404");
        }
    }
}).listen(3000);

4、初识EJS模块引擎

我们学的EJS是后台模板,可以把我们数据库和文件读取的数据显示到Html页面上面。它是一个第三方模块,需要通过npm安装:npminstallejs–save
EJS常用标签

  • <%%>流程控制标签
  • <%=%>输出标签(原文输出HTML标签)
  • <%-%>输出标签(HTML会被浏览器解析)

5、Get、Post

GET-从指定的资源请求数据。(一般用于获取数据)
POST-向指定的资源提交要被处理的数据。(一般用于提交数据)

加粗样式获取GET传值:

varurlinfo=url.parse(req.url,true);
urlinfo.query;

获取POST传值:

varpostData = "";
//数据块接收中
req.on("data", function (postDataChunk) {
  postData += postDataChunk;
});
//数据接收完毕,执行回调函数
req.on("end", function () {
  try {
    postData = JSON.parse(postData);
  } catch (e) {}
  req.query = postData;
  console.log(querystring.parse(postData));
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值