node.js是什么?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的出现吸引了很多前端开发人员开始用 JavaScript 开发服务器代码,其异步编程风格也深受开发人员的喜爱。Node.js 的伟大不仅在于拓展了 JavaScript 在服务器端的无限可能,更重要的是它构建了一个庞大的生态系统。
node.js的安装以及环境搭建
-
下载node安装node环境(https://nodejs.org/en/download/)
-
检查是否安装成功:打开cmd如图所示则成功
-
使用vscode 开发 简单配置开发环境 安装node.js开发插件
Node.js创建第一个应用:
1.接入服务端
2.创建服务器
3.需要引入http模块 流处理API
4.引入文件
5.使用API方法
6.设置端口port
//携入服务端
//创建服务器
//需要引入http模块 流处理api
//1.引入文件
//2. 使用api的方法
//3. 设置端口port
const http=require("http");
//req 请求相关信息 res服务返回的相关信息
http.createServer((req,res)=>{
//配置响应头的编码格式
//res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//响应数据
res.write("你好node.js")
//服务结束
res.end();
}).listen(8150,"localhost",()=>{
console.log("server start");
});
url模块:
引入url模块
var url = require(’ url ');
方法调用
url.parse( ) 解析url地址`
var url=require('url');
var src='http://www.baidu.com?name=maodou&sex=0';
//解析地址
//参数1位解析的路径 参数2:可以将地址上的值解析出来
var path=url.parse(src,true);
console.log(path);
使用http模块+url模块解析路径上的值
var http=require("http");
//url 模块 解析路径 www.maodou.com?id&name=2
var url=require("url");
http.createServer(function (req,res){
//配置响应头的编码格式
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//解析路径输出路径上的值
var path=url.parse(req.url,true);
res.write(path.query.id);
res.end();
}).listen(8100);
注意
在node.js中文件修改需要重新启动服务:这样开发比较慢,所以需要安装自启动工具supervisor
安装方法:cnpm install -g supervisor --save
安装完成之后启动文件使用 supervisor ****.js
启动服务之后修改代码会自动启动服务
Common.js和Node.js模块
- Common.js中的自定义模块
Commonjs规范的提出,弥补javascript没有标准的缺陷,提供一个类似后端语言的标准库,也就是说commonjs是模块化的标准,nodejs就是commonjs模块化的实现。在nodejs中除了http,url,fs等等都是nodejs的内置模块,可以直接使用,commonjs中自定义模块的实现:
- node.js中的自定义模块
在nodejs中将公共的功能抽离为单独的js文件作为模块,在外部是没有办法访问的(类似后端的私有的属性和方法);要想使用模块,就必须在模块里面通过exports或者module.exports暴露属性或者方法。在需要的模块使用require引入模块。
server.js
const http=require("http");
//自定义模块封装
let server=require("createServer");
//req 请求相关信息 res服务返回的相关信息
http.createServer(server).listen(8150,"localhost",()=>{
console.log("server start");
});
//整个模块 暴露出去
//export default http;
module.exports=http;
common.js
/*
在js文件里面引入Server.js模块文件
*/
var server=require("./Server.js");//在当前的目录里面找文件 也可以省略.js后缀
node.js
let stu=[
{
"name":"张三",
"age":"20",
"sex":"男"
},
{
"name":"张三",
"age":"20",
"sex":"男"
}
]
module.exports=stu;
common2.js
var s=require("./todo");
console.log(s.name);
console.log(s.setwork());
注意:
nodejs 可以自动找node_modules文件下的文件 :如果node_modules文件下有文件夹 可在cd进入这个文件 使用命令npm init –yes 安装当前文件的package.json文件,直接请求require(“名字”);
node.js第三方包的使用:
创建 node项目之后先使用命令进入项目文件,安装项目的配置文件package.json文件。
使用命令 npm init /cnpm init 或者 npm init –yes/cnpm init –yes (这种表示严格模式命名)
{ "name": "nodedemo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
第三方包使用建议官网:www.npmjs.com
单向加密(不能解密)
md5-node包
安装包cnpm install md5-node --save
安装完之后项目里面生成一个node_modules依赖文件
使用方法:
server.js
const http=require("http");
//自定义模块封装
let server=require("createServer");
//req 请求相关信息 res服务返回的相关信息
http.createServer(server).listen(8150,"localhost",()=>{
console.log("server start");
});
//整个模块 暴露出去
//export default http;
module.exports=http;
createServer.js
//url 模块 解析路径 www.maodou.com?id&name=2
const url=require("url");
let stuData=require("../model/getUserData");
//要加密先引入加密模块
let md5=require("md5-node");//单向加密 不能解密
module.exports=(req,res)=>{
if(req.url!="/favicon.ico"){
let path=url.parse(req.url,true);
//配置响应头的编码格式
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//响应数据
console.log(stuData);
console.log(md5('12345'));//e10adc3949ba59abbe56e057f20f883e
//服务结束
res.end();
}
}
双向加密(可解密):
base64 包
安装包cnpm install base64 --save
安装完之后项目里面生成一个node_modules依赖文件
使用方法:
server.js
const http=require("http");
//自定义模块封装
let server=require("createServer");
//req 请求相关信息 res服务返回的相关信息
http.createServer(server).listen(8150,"localhost",()=>{
console.log("server start");
});
//整个模块 暴露出去
//export default http;
module.exports=http;
createServer.js
//url 模块 解析路径 www.maodou.com?id&name=2
const url=require("url");
let stuData=require("../model/getUserData");
//引入加密解密模块 jsbase64
let base64=require("js-base64").Base64;
//加载文件流fs模块
let stream=require("../model/filestream");
module.exports=(req,res)=>{
if(req.url!="/favicon.ico"){
let path=url.parse(req.url,true);
//配置响应头的编码格式
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//使用base64加密解密
let encode= base64.encode(JSON.stringify(stuData));
console.log(encode);//MTIzNDU=
let str=base64.decode(encode);
console.log(JSON.parse(str));
//服务结束
res.end();
}
}
getUserData.js
let stu=[
{
"name":"张三",
"age":"20",
"sex":"男"
},
{
"name":"张三",
"age":"20",
"sex":"男"
}
]
module.exports=stu;