node.js菜系食用方法
node.js框架
一、简介
浏览器可以解析js的原因
浏览器使用js解析引擎进行解析
**记忆:Chrome是V8引擎
NodeJS中的API模块
例如:fs:文件系统模块、path:路径模块、http:WEB服务器模块
但是不包含DOM和BOM等浏览器API,所以**Node中无法操作DOM和BOM**
二、准备前期
安装Node.js
打开官网下载最新版本
检测方法
打开cmd命令行,输入node -v可以查看安装的版本号
三、包管理工具npm
安装文件
npm install 包名;
npm install 包名@指定版本
eg:时间格式化
//首先在vscode终端,npm install moment安装时间格式化包
const moment = require("moment");//导入moment模块
const time = moment().format("YYYY-MM-DD HH:mm:ss");//HH大写是24小时制,hh是12小时制
console.log(time);
四、Node.js的模块
(1)fs文件系统模块
fs模块是Node.js专门操作文件的模块
readFile读取文件
//语法:fs.readFile(path,[,options],callback)
// 路径, 设置 回调函数
//eg:
const fs = require("fs");//引入fs模块
fs.readFile("./01.txt","utf8", function(err,data){console.log(data)});
//读取文件 文件路径 字符集 回调函数 参数1,参数2
//如果读取成功,err值为null。如果读取失败,err的值为错误读写,data的值为undefined
判断文件是否读取成功
const fs = require("fs");//引入fs模块
fs.readFile("./02.txt","utf8",function(err,data){if(err){//如果读取失败console.log("文件读取失败"+err.message);}console.log(data);
})
writeFile写入文件
//语法:fs.writeFile(file,data[,options],callback)
// 文件 数据 配置 回调函数
//eg:
const fs=require("fs");//导入fs模块
fs.writeFile("./01.txt","我是添加内容", function(err,data){console.log(data)});
//写入文件 文件路径 添加内容 回调函数 参数1,参数2
判断文件是否写入成功
const fs=require("fs");//导入fs模块
fs.writeFile("./01.txt","我是添加内容",function(err,data){if(err){console.log("文件写入失败"+err.message);}console.log("文件写入成功");
});
__dirname自动获取文件所在的目录位置
cosnt fs = require("fs")//导入fs模块
fs.readFile(__dirname + "/01.txt","utf8",function(err,data){if(err){console.log("文件读取失败"+err.message);}console.log("文件读取成功");
})
(2)path路径模块
path.join()连接路径
const fs = require("fs");//导入fs模块
const path = require("path");//导入path模块
fs.readFile(path.join(__dirname+"./01.txt"),"utf8",function(err,data){。。。
})
path.basename()获取文件名
const path = require("path");//导入path模块
const str = "code/text/01.txt";//假设code文件夹下的text文件夹下有个01.txt文件
console.log(path.basename(str));//01.txt 获取完整的文件名
console.log(path.basename(str,".txt"));//01 获取排除后缀名以后的文件名
path.extname获取文件后缀名
const path = require("path");//导入path模块
const str = "code/text/01.txt";//假设code文件夹下的text文件夹下有个01.txt文件
console.log(path.extname(str));//.txt 获取文件的后缀
(3)http模块
http模块使用方法
const http = require("http");//导入http模块
const server = http.createServer();//创建服务实例
server.on("request",(req,res)=>{console.log("请求服务器了");
});
server.listen(80,()=>{console.log("server is listen:127.0.0.1");
});
req 捕获到客户端请求到服务端的请求对象
测试get请求,req.url:可以获取客户端请求的地址 req.method:可以获取客户端请求的方式
const http = require("http");//导入http模块
const server = http.createServer();//创建服务实例
server.on("request",(req,res)=>{console.log(req.url);//获取请求地址console.log(req.method);//获取请求方式
});
server.listen(80,()=>{console.log("server is listen:127.0.0.1");
})
测试get请求,利用postman工具(post/get都能测)
res 响应的内容
const http = require("http");//导入http模块
const server = http.createServer();//创建服务实例
server.on("request",(req,res)=>{res.end(req.url+req.method);//客户端响应内容
});
server.listen(80,()=>{console.log("server is listen:127.0.0.1");
});
解决相应乱码问题
//在请求中添加请求头
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {** res.setHeader("Content-Type", "text/html;charset=utf-8");**res.end(req.url + req.method);
});
server.listen(80, () => {.....
});
如何让不同地址相应不同内容
//添加if判断
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {let content = "";if (req.url == "/" || req.url == "/index.html") {content = "<h1>首页内容</h1>";} else if (req.url == "/detail.html") {content = "<h1>详情页内容</h1>";} else {content = "<h1>你访问的页面不存在</h1>";}res.setHeader("Content-Type", "text/html;charset=utf-8");res.end(content);
});
server.listen(80, () => {console.log("server is listen:127.0.0.1");
});
(4)express搭建web服务器框架
express使用
//首先npm install express@版本号
const express = require("express");//导入express框架
const app = express();//搭建web服务器
app.listen(80,()=>{console.log("服务已经启动127.0.0.1");
});
测试express的get请求
const experess = require("express");//导入express模块
const app = express();//搭建web服务器
// 发送get请求
app.get("/user", (req, res) => {res.send({ code: 200, msg: "响应get请求成功", status: 1 });
});
app.listen(80, () => {console.log("服务已经启动127.0.0.1");
});
测试express的post请求
//通过postman测试
获取get请求参数
req.query可以获取get请求获取参数
app.get("/user", (req, res) => {let msg = req.query;res.send({ code: 200, msg: msg, status: 1 });
});
获取动态参数
// 发送get请求
app.get("/user/:id/:name", (req, res) => {let msg = req.params;res.send({ code: 200, msg: msg, status: 1 });
});
获取post请求的参数
传递json格式
const express = require("express");
const app = express();
// 使用中间件把数据转换成json格式,后面req.body才能正常接收到
app.use(express.json());
app.post("/user/add", (req, res) => {const body = req.body; //获取post请求的数据console.log(body);res.send("接收到post请求数据" + body);
});
app.listen("80", () => {console.log("服务已经启动了 127.0.0.1");
});
获取url-encode提交的数据
const express = require("express");
const app = express();
// 使用中间件把数据转换成json格式,后面req.body才能正常接收到
// app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.post("/user/add", (req, res) => {const body = req.body; //获取post请求的数据//console.log(body);res.send(body);
});
app.listen("80", () => {console.log("服务已经启动了 127.0.0.1");
});
express.satic()静态资源
const express = require("express");
const app = express();
//设置静态资源目录
app.use(express.static("./test"));app.listen(80, () => {console.log("服务已经启动127.0.0.1");
});
//浏览器如下访问:http://127.0.0.1/public/images/1.jpg
五、nodemon工具
npm install nodemon -g安装nodemon工具nodemon xx.js会用nodemon工具打开js文件,自动监听代码的变化
六、路由
定义:是客户端的请求和服务器处理函数之间的映射关系。
app.get("/user", (req, res) => {let msg = req.params;res.send({ code: 200, msg: msg, status: 1 });
});app.get("/product", (req, res) => {let msg = req.params;res.send({ code: 200, msg: msg, status: 1 });
});
路由模块
//router.js文件
const express = require("express");
const router = express.Router(); //创建路由对象
// 挂载路由
router.get("/product/list", (req, res) => {res.send("实现商品列表显示功能");
});
router.post("/product/add", (req, res) => {res.send("实现商品添加功能");
});
module.exports = router; //导出路由对象
//01.js
const express = require("express");
const app = express();
// 导入路由模块
const router = require("./router");
// 注册路由
app.use(router);
// 启动服务
app.listen("80", () => {console.log("服务已经启动 http://127.0.0.1");
});
路由前缀
const express = require("express");
const app = express();
// 导入路由模块
const router = require("./router");
// 注册有前缀的路由
app.use("/api", router);
// 启动服务
app.listen("80", () => {console.log("服务已经启动 http://127.0.0.1");
});
七、中间件
定义:客户端把请求发送给服务端以后要经过层次的中间件的处理,最终才能获得响应结果。
全局中间件
const express = require("express");
const app = express();// 设置全局中间件
app.use((req, res, next) => {let into = "测试消息";req.dd = into;next();
});
app.get("/product", (req, res) => {res.send("get请求" + req.dd);
});
app.post("/product", (req, res) => {res.send("post请求" + req.dd);
});
// 启动服务
app.listen("80", () => {console.log("服务已经启动 http://127.0.0.1");
});
//多个中间件是共享req和res对象的,所以在上层的中间件之间设置参数属性,在后面的中间件就能获取到挂载到req对象上面的参数。
局部中间件
//如果路由中有的需要中间件,有的不需要
const express = require("express");
const app = express(); //创建服务对象// 定义局部中间件
const middle = (req, res, next) => {console.log("局部中间件");next();
};
app.get("/product/list", middle, (req, res) => {res.send("展示商品列表");
});app.post("/product/add", (req, res) => {res.send("添加商品列表");
});
app.listen("80", () => {console.log("服务已经启动了 127.0.0.1");
});
//1、写中间件必须添加next()函数放行
//2、间件函数可以挂载到app上,也可以定义在局部
//3、间件必须在路由之前写
第三方中间件body-parser
//先安装 npm install body-parser
require("body-parser")
app.use(parser.urlencoded({extended:false}))
//代码示例如下
const express = require("express");
const app = express();
// 使用中间件把数据转换成json格式,后面req.body才能正常接收到
// app.use(express.json());
const parser = require("body-parser");
app.use(parser.urlencoded({ extended: false }));app.post("/user/add", (req, res) => {const body = req.body; //获取post请求的数据console.log(body);res.send(body);
});
app.listen("80", () => {console.log("服务已经启动了 127.0.0.1");
});
八、node连库
创建连接
//先安装mysql服务npm install mysql
const mysql = require("mysql");
const db = mysql.createPool({host: "localhost",user: "root",password: "root",database: "test"
});
console.log(db);
db.query("select * from users", (err, results) => {if (err) {return err.message;}console.log(results);
});
增
const mysql = require("mysql");
const db = mysql.createPool({host: "localhost",user: "root",password: "root",database: "test"
});
console.log(db);
let user = { username: "武伟", password: "666" };
let sql = "insert into users (id,username,password) values (NULL,?,?)";
db.query(sql, [user.username, user.password], (err, results) => {if (err) {return err.message;}console.log(results);if (results.affectedRows == 1) {console.log("插入成功");}
});
删
// 演示设置静态资源
// 用experss框架搭建web服务
const express = require("express"); //1、引入框架
const app = express(); //2.创建服务实例
// 设置静态资源模板
app.use(express.static("./test"));// 可以根据不同的请求做不同的处理 请求方式、请求地址、响应数据
app.get("/product", (req, res) => {res.send("hello");
});// 3、启动服务
app.listen("80", () => {console.log("服务已经启动了 127.0.0.1");
});
改
const mysql = require("mysql");
const db = mysql.createPool({host: "localhost",user: "root",password: "root",database: "test"
});let user = { id: 11, username: "new武伟", password: "777" }; //要更新的数据
let sql = "update users set username=?,password=? where id=?";
db.query(sql, [user.username, user.password, user.id], (err, results) => {if (err) {return err.message;}console.log(results);if (results.affectedRows == 1) {console.log("更新成功");}
});
九、跨域问题以及解决方法
什么是跨域
浏览器出于安全考虑要求同一个域名下的html页面可以对同一个域名下面的脚本发出请求,否则就会报下面的错误。'Access_Control-Allow-Origin'当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
解决方法
//安装cors插件npm install cors
const cors = require("cors");//导入cors包
app.use(cors())//注册使用这个中间件
node.js菜系食用方法相关推荐
- Node.js与Sails~方法拦截器policies
policies sails的方法拦截器类似于.net mvc里的Filter,即它可以作用在controller的action上,在服务器响应指定action之前,对这个action进行拦截,先执行 ...
- zabbix node.js mysql_Zabbix添加Node.js监控的方法
目前网上已有 pm2-zabbix 工具可以实现Zabbix对Node.js的监控报警,Github地址. 特征: 自动发现通过PM2管理的Node.js进程. 报告Nodes.js进程状态.CPU占 ...
- Node.js 调用 C++ 方法 / C++ Addons 详解
最近开发涉及到了一些Node.js调用C++的地方,于是网上搜了一下,发现网上好多文章都是比较片面的东西,没法直接使用.于是花点时间总结一下. Android开发中Java 调用C++的部分叫JNI, ...
- Node.js 常用Mongoose方法
Node.js 手册查询-Mongoose 方法 一.Schema 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以说是数据属性模型(传统意义的表结构 ...
- 子进程会继承父进程的哪些内容_【学习教程】Node.js创建子进程方法
来源 | https://github.com/CommanderXL/biu-blog/issues/25 exec 其中exec可用于在指定的shell当中执行命令.不同参数间使用空格隔开,可用于 ...
- node.js 字符串拆分方法总结
接口测试中Postman是经常会用到的工具之一,因此要了解一些简单的Node.js语言. 项目中用到的字符串拆分的一些方法总结如下. 1.slice(); 对象可以为Array或String slic ...
- 树莓派开机运行node.js脚本的方法
http://gyzx.swjtu.edu.cn/icsites/devzone/node/352 一.配置Raspberry Pi无线网络. 插上无线网卡 sudo nano /etc/wpa_su ...
- node.js从零开始搭建服务器(详细1)
首先下载安装node.js 本文从基本开始搭建,(详细1)步骤不出错的情况下基本实现接口配置,请求传参与接收. 新建一个文件夹,命名为serve,在该文件下创建app.js子文件,此为服务器入口 内容 ...
- Node.js模块系统
2019独角兽企业重金招聘Python工程师标准>>> 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分 ...
最新文章
- yii 操作cookie
- java开发环境配置环境变量_3. Java开发环境的搭建:安装JDK,配置环境变量
- Window2008R2安装Telnet客户端
- 关于iptables
- bind blz mysql_MySQ DBAL重点剖析课程 企业级MySQL系统安全与DBA运维日常事务管理 运维DBA必备宝典...
- python中集合运算_入门 | 一文带你了解Python集合与基本的集合运算
- 1054. The Dominant Color (20)
- “数学不好,干啥都不行!”骨灰级程序员:别再瞎努力了!
- ElasticSearch 集群监控
- python基础学习笔记(七)
- qq的 html页面布局,wep.qq webqq网页版QQ怎么登陆
- 单极性非归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真
- 45% 72% 100sRGB 色域
- 应聘总经理的答卷,供大家打分!(一)
- Oracle账号 Oracle官网登录下载资源账号密码共享
- 97. Interleaving String
- aix 下创建vg和lv
- 匹配的通配符很全面,但无法找到元素mvc:annotation-driven的声明
- linux dns chroot,chroot环境下dns解析不好用
- linux怎么配置网卡实训报告,网络配置实验心得5