node.js(分为内置模块和第三方模块)
- node是什么:是将chrome浏览器中的负责解析js部分的V8引擎剥离出来,做成了一个软件,以做到让我们写的JS代码脱离浏览器可以执行。这个执行环境中只有ECMAscript部分,没有DOM和BOM。
- node如何使用:node中有很多功能,分成了若干个模块,用户可以按需使用,需要用哪个,使用commonJs写法
require+"模块名"
引入模块
fs (内置模块)读取和写入文件
const fs = require("fs");
//异步读取文件
fs.readFile("data.txt", (error, data) => {
if (error) {
console.log(error)
} else {
console.log(String(data))
}
})
//同步读取
console.log(String(fs.readFileSync("data.txt")))
console.log("hello~")
//异步写入文件
fs.writeFile("data1.txt", "老王", error => {
if (error) { console.log(error) } else {
console.log("写入成功,嘿嘿~")
}
})
//同步写入
fs.writeFileSync("data2.txt", "小仙(好程序员)")
第三方模块
第三方模块下载: npm install 模块名 --save 或 npm i 模块名 -S
第三方模块网站:https://www.npmjs.org
切换npm下载淘宝镜像国内下载源:npm config set registry https://registry.npm.taobao.org
express:类似于Apache软件,对外开放某一个端口提供Web服务
//express不是一个对象,而是一个方法,返回函数本身,加()直接调用
let express = require("express")();
const port = 8080;
// 计划监听来自前端的get(http)请求(不是一个静态请求,而是一个路由请求),如果请求路由正确,则自动调用第二个参数,即函数
//request:是前端的请求;response:是要返回给前端的内容
express.get("/list",(request,response)=>{
// 接收到来自前端的请求name参数,并赋值到name变量中
let name = request.query.name;
//成功后
// 在后端控制台输出内容
console.log("接收到来自前端发送的请求");
// 向前端返回数据
response.send(`${name},success!!!!`)
})
// 监听来自前端的get请求(不是一个静态请求,而是一个路由请求)
express.get("/details",(request,response)=>{
// 在后端控制台输出内容
console.log("接收到来自前端发送的details路由请求");
// 向前端返回数据
response.send("哈哈哈哈哈")
})
// 监听在哪一个8080端口上
express.listen(port)
console.log("server is running at " + port)
解决跨域的代码(反向代理,后端独立解决,直接粘贴)
// Node解决跨域问题11
express.all("/*", function(req, res, next) {
// 跨域处理
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
next(); // 执行下一个路由
})
//或者09
express.all("*",function(req,res,next){
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin","*");
//允许的header类型
res.header("Access-Control-Allow-Headers","content-type");
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
if (req.method.toLowerCase() == 'options')
res.send(200); //让options尝试请求快速结束
else
next();
})
node-mysql 读取数据库
mysql/express 配合使用
let mysql = require("mysql");
let express = require("express")();
const port = 8080;
// Node解决跨域问题
express.all("/*", function(req, res, next) {
// 跨域处理
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
next(); // 执行下一个路由
})
// 规划链接
let sql = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
database : 'tech',
timezone:"08:00",
port:3306
});
// 尝试链接
sql.connect();
//接收来自前端的请求并查找数据库并向前端返回查找结果
express.get("/getStudentsList",(request,response)=>{
sql.query(`SELECT * FROM students`,(error,data)=>{
if(error){
console.log(error);
}
else{
response.send(data)
}
})
})
// 监听在哪一个8080端口上
express.listen(port)
console.log("server is running at " + port)