nodejs

node.js是运行在服务端的JavaScript
1、创建nodejs服务器
使用http模块
引入http模块
开始创建服务器 createServer
req request指代url信息
res requestserver浏览器返回的响应信息
localhost:8000/?id=1&name=zhangsan

var http=require("http");
var url=require("url"); //路径解析模块
http.createServer(function(req,res){
    //设置响应头 字符集utf-8解决中文乱码
    res.writeHeader(200,{"Content-Type":"text/html;charset=utf-8"});
    /* console.log(req.url);//  /   /favicon.ico  */
    if(req.url != "/favicon.ico"){
    res.write("我是nodejs服务器");
    console.log(req.url); //   /
    /*console.log(url.parse(req.url,true));//解析路径  */
    let path=url.parse(req.url,true);
    let data=path.query;//拿到路径上的json数据
    console.log(data);// {id:'1',name:'zhangsna'}
    }    
    res.end();//请求完成之后 结束服务器
}).listen(8000);//端口8000
console.log("http://localhost:8000");

启动js文件 node ?.js 有修改就得重新启动
nodejs自启动工具 supervisor 安装cnmp install -g supervisor
启动文件 supervisor ?.js
2、nodejs模块
①内置模块 http url fs
②自定义模块 外部的js文件封装代码
③插件
模块暴露:moudle.export=sever;
server.js

var http = require("http");
var url = require("url");
let server=http.createServer(function(req,res){
    res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
    if(req.url != "/favicon.ico"){
        let path=url.parse(req.url,true);
        let data=path.query;
        console.log(data.id,data.name);
        res.write("我的nodejs服务器");
    }
}).listen(8000);
moudle.export=server;

在另一个app.js文件中引入server.js
就可以 node app.js运行文件

let server=require("./server");//写相对路径

student.js

let stus={
    name:"张三",
    age:"18",
}
module.export=stus;

在server.js 中引用student.js的数据var stu=require("./student"); res.write(stu.name);

collection.js
函数模块暴露
在server.js里requirevar fun=require("./collection") 然后console.log(fun());就会输出函数的运行结果

moudle.exports=function(){
    return ?;
}

在app.js中也可以运行student.js collection.js文件 因为app.js已经引入了nodejs搭建的服务器
我们可以建一个文件夹叫node_moudles 把需要连接的js文件放进去 此时require文件时就可以不写相对路径 直接写文件名
★插件 —— 第三方模块
先在项目里面生成package-json配置文件 生成命令 cnpm init
进入www.npmjs.com
md5加密模块 单向加密 只能加密不能解密
安装MD5插件 cnpm install md5-node --save
先导入加密包let md5=require("md5-node");加密md5();比如md5(123);

★通常的php+js php需要放在Apache服务器下运行 而node可以自己生成服务端
node可以做中间层(IO) 沿用js的语法
①全局对象 何时何地都可以访问 ②核心对象 来自系统 ③自定义对象 按路径引入
(1)process是全局对象console.log(process.env) (environment)
process.env是一个对象 我们可以通过其属性名来获取具体的环境变量值process.env.环境变量名
(2)node运行console.log(process.argv)的文件后面可以输入 将拿到一个数组[node的绝对路径,文件的绝对路径,传递值,传递值] 传递值在cmd中

let num1=process.argv[2];
let num2=process.argv[3];
let num=num1+num2;
setTimeout(()=>{
    console.log(num);
},2000);
//cmd运行 node xxx.js 传值 传值

(3)__filename 获取当前运行文件的目录 绝对路径
__dirname运行当前文件的绝对路径
④commonjs
文件是一个模块 单独执行能力 寻求其他模块支持的能力 提供自己给其他模块的能力
也就是 引用外部模块require & 模块暴露module.export
⑤核心对象 path const path=require('path');

//路径拼接 校验 path.join()
const path=require('path');
const aPath=path.join(__dirname,'/one/','//two//');
console.log(apath);// console 当前目录/one/two
//根据相对路径 返回绝对路径 path.resolve()
const str='./abc/efg.js';
let bPath=path.resolve(str);
console.log(bpath); 
//接收字符串路径将其转换为对象 path.join()
const path=require('path');
let cPath=path.join(__dirname,'abc','def','xxx.txt');
let pathObj=path.parse(myPath);
console.log(pathObj);//{root:  dir:  base:'xxx.txt'  ext:'.txt'  name:'xxx' }
path.base='xxx';//修改
//path.format() 路径对象转字符串

⑤fs 文件操作 const fs=require('fs');
fs.readFile(url,callback);fs.writeFile(url,data,callback);
异步 同步会阻塞后续代码的运行 callback就是一个异步的过程
异步读取 readFile() 同步读取readFileSync()

const fs=require('fs');
fs.readFile('./xxx.xxx',(err,data)=>{
    if(err) throw err;
    console.log(data);//输出 buffer HEX(16进制) HEX→DEC ascii→对应字母等
    console.log(data.toString());//获取里面的字符串数据
    //也可以在()加 'utf8'
})
fs.writeFile('./xxx.xxx','写的内容',(err)=>{
    if (err) throw err;
    console.log('完成');
    //将会覆盖原文件
})
//追加
fs.writeFile('./xxx.xxx','写的内容',{flag:'a'},(err)=>{});
//追加 appendFile(url,data,callback)
fs.appendFile('./xxx.xxx','追加',(err)=>{
    if (err) throw err;
})
//读写
let data=fs.readFileSync('./a.txt','utf8');
fs.writeFuleSync('./b.txt',data);//将会复制一个与a内容一致的txt

判断文件:w写 r读 x存在
fs.access fs.readdir fs.stats
遍历文件夹-S--save -D--save-dev
⑥nodeIO中间层
IO接收请求报文不阻塞其它代码 响应不必等待O的写出完成 与IO操作结果无关的代码不阻塞
模型 客户端+Nginx+node+服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值