Node.js
零:初始化node:
首先打开cmd控制台
新建文件夹 打开文件 输入 npm login
Username: yangbaoxi
Password: *********
Email :992262716@qq.com
再次输入 npm init
Name: 文件包的自定义名字
Version:版本号
Description: 描述
Entrycommand :程序入口 默认 index.js
Git repository: git 仓库
Ketwords : 关键字
Author :作者
License :开源证书 (ISC)
总结:建立一个与默认JS 相同的JS库
发布上传:输入ènpm publish
下载文件:在另一个文件下建立文件输入 npm install
更新文件:在发布文件夹下 npm publish (版本号改更)再在下载文件 npm update
删除包:在发布文件夹下 npm unpublish 再次确定 npm --force unpublish
一:服务器: ------------------npm install express
const express =require(‘express’) // 服务器插件
var server = expression(); // 创建服务器
server.listen(8080); // 端口号 8080
检测服务器是否正常:
server.get(‘/’, function(req,res){
console.log(1); res.end( );
})
二:文件加载到页面: --------------npm install express-static
const express =require(‘express’);
const expressStatic = require(‘express-static’); // 文件夹加载插件
var server = express(); server.listen(8080);
server.use(expressStatic('./www'));// 静态文件夹加载(文件的路径)
检测是否加载成功:
建立一个html文件à index.html ==>然后 cmd执行server.js
在网页输入http://localhost:8080/index.html
三:get请求,post请求:
1. get请求: const express =require('express');
varserver = express(); server.listen(8080);
server.get('/',function(req,res){ //GET请求
console.log(req.query); // 获取get参数
})
检测:get请求:method = “get”
<formaction="http://localhost:8080" method="get">
用户:<inputtype="text" name="user" />
密码:<inputtype="password" name="password" />
<input type="submit"value="提交">
</form>
2.post请求:-----------npm install body-parser
const express= require('express');
constexpressStatic = require('express-static');
constbodyParser = require('body-parser'); //post请求插件
varserver = express(); server.listen(8080);
server.use(bodyParser.urlencoded({ // 支持body传入
extended:false, // 扩展 (默认值为true à要改成false)
limit:2*1024*1024 // 2M (内存容量)
}));
server.post('/',function(req, res){ // POST请求
console.log(req.body); // 获取post参数
console.log(req.body.user) // 获取帐号
console.log(req.body.pass) // 获取密码
});
server.use(expressStatic('./www'));
检测: method = “post”
<formaction="http://localhost:8080" method="post">
用户:<input type="text"name="user" />
密码:<input type="password"name="password" />
<input type="submit" value="提交">
</form>
四:cookie+session(总体)
1.cookie的存储数据: // 了解
const express = require('express');
var server = express();
server.use('/', function(req,res){
res.cookie('lisi','123456'); // 向cookie存储数据
//res.clearCookie('lisi'); // 删除cookie
res.send('ok');
res.end();
});
server.listen(8080);
2.cookie加密+读取: // 了解----------npm install cookie-parser
const express = require('express');
constcookieParser = require('cookie-parser') //cookie加密插件
var server = express();
// 识别cookie(里面的乱码是加密)
server.use(cookieParser('jksfah'));
server.use('/', function(req,res){ // 读取cookie数据
// req.secret="dfsgkldj;g";// 秘钥
// console.log(req.cookies); // 读取内容
res.cookie( 'wangwu' , '678900' , {signed:true} ) //签名
3.session加密传输 // 重点 ------ npm install cookie-session
constexpress = require('express');
const cookieParser= require('cookie-parser');
constcookieSession = require('cookie-session');// session插件
var server = express();
var arr = []; //key值数组
for (var i = 0; i <100000; i++) {
arr.push('sig_'+Math.random());
}
server.use(cookieParser()); // 识别cookie
server.use(cookieSession({ // keys id的名字流动key值
name:’sess’, // name 自己记录的是哪个session
keys:arr, // keys id的名字流动key值
maxAge:2*3600*1000 // maxAge 过期时间
}));
server.use('/', function(req,res){
// 读取session中的数据
if (req.session['count'] == null){req.session['count'] = 1;}
//每次登录页面都会记录一次数据,数据保存++;
else {req.session['count'] ++;}
检测:console.log(req.session['count']);
//每当我们登录页面都会记录登录的次数
res.send('ok');
});
server.listen(8080);
五.模板:jade ejs --------npm install jade ejs
1.jade:模板:
à基本语法:
const jade = require(‘jade’) // jade 模板插件
varstr = jade.render(‘div’) // 写入文字转换为html标签
console.log( str ) 输出:<div></div>
模板引用+模板的写入html标签
const jade =require('jade');
// 参数一:模板的路径 参数二:传输的内容
varstr = jade.renderFile(‘'./views/1.jade'’,{pretty:true})
-------pretty:true(是将模板整齐化)
console.log(str)
模板的语法:
1.普通语法:
2.写入属性:
3.JS的写入:
4.文字输入+css样式写入+class写入:
5.后台传值 ---模板:
6.变量: 前面要加一个 “——”
7.for循环:
8.if语句:
9.switch循环语句:
2.ejs模板: ejs模板跟html一样
语法: 我的名字叫: <%= name %>(ejs模板)
const ejs =require(‘ejs’ ) // ejs模板插件
ejs.renderFile('./views2/1.ejs',{name:'zhangsan'},function(err, data){
if (err) {console.log('编译出错');
else{ console.log(data); // data ejs页面中的内容
})
// ejs 参数1 模板路径 参数2 参数参数3 回调函数
for循环:-----
引入文件:
ejs页面: <% include a.txt %>
<% include test.html %>
执行后台JS:
ejs.renderFile('./views2/5.ejs',{},function(err, data){
if(err) { console.log('编译出错'); }
else{ console.log(data); //data ejs页面中的内容}
}
if判断:----
六.文件上传: -----npm install multer
语法: multer({dest:上传路径})
允许上传的内容------(一般都是全部允许)
接受内容 req.files
案例:---
const express = require('express');
const multer = require('multer'); // 上传文件的插件
const pathLib =require('path'); //分解文件内容(系统自带)
const fs =require('fs') // 读取写入文件(系统自带插件)
var server = express();
//创建一个multer对象 ()里面添加上传文件的保存位置
var obj = multer({dest:./www/upload})
server.use(obj.any()); // 允许上传的内容 any()所有文件
server.post(‘/’ , function ( req , res ){
// 通过req.files 查看上传文件的资料
console.log(req.files)
// 查找path+添加扩展名 用一个变量接受我们要实现的后缀名。
var newName =req.files[0].path + pathLib.parse
(req.files[0].originalname).ext;
// 用fs 系统自带的插件,来进行替换“重命名”
fs.rename(req.files[0].path,newName,function(err){
if (err) {res.send('上传失败')}else{res.send('上传成功')}
}
})
server.listen(8080);
总结:通过form表单进行上传文件,需要加一个属性
enctype="multipart/form-data"(一定加)
然后直接复制html路径在网页打开,上传一个文件,这个文件会下载到
({dest:./www/upload})这个路径,后缀名通过fs.rename进行改变。
七.模板引擎-----npm install consolidate 重点!重点!重点!
语法:配置模板引擎:
1.输出什么页面 参数一:固定值, 参数二:什么类型的文件
server.set('viewengine','html/txt/css/js……')
2.模板存放的位置:参数一:固定值,参数二:模板文件的路径
server.set( 'views' ,'./xxxx路径 ' );
3.渲染到页面:参数一:渲染成什么样式(html)参数二:那种模板类型(jade/ejs)
server.engine( 'html', consolidate.ejs/jade )
4.接受用户请求:参数一:接口路径,参数二:回调函数
server.get( “/” , function(req,res){
res.render('模板名字', { 对应参数 }) }) //文件的渲染
案例:
const express =require('express');
constconsolidate = require('consolidate');// 模板引擎
const ejs =require('ejs'); // ejs模板
var server = express();
server.set('viewengine','html');
server.set('views','./temp'); // 上传文件在temp文件下
server.engine('html',consolidate.ejs);
server.get('/',function(req,res) {
res.render(‘1.ejs’,{name:’ 王琦是猪 ’}) // 将模板页渲染
}
server.listen(8080);
总结:我们要建立一个文件夹名:temp,里面存放我们要渲染的模板后缀名为ejs
打开浏览器出入http://localhost:8080 得到我们渲染模板。
八.路由 --------npm install express-route 重点!重点!重点!
语法:渲染不同的页面,同一个目录下/user/=> a页面 b页面
分流模块:创建一个路由对象
var route = express.Router( )
分流的请求方式:
àget: route.get()
àpost: route.post()
àuse: route.use()
模拟一个路由:(熟知)
const express = require(‘express’);
var server = express( );
1.创建一个路由对象:
var route = express.Router( );
2.实现路由
route.get(‘/a.html’, function(req,res){
res.send(‘每天帅醒’)
})
route.get(‘/b.html’, function(){
res.send(‘累到不想在哭为止’)
})
3.绑定路由:
server.use( ‘/shei’, route )
总结:首先建立一个路由var route = express.Router( );
在第二步的参数是为了在网页上输出路径用的,绑定路由后在网页
输入http://localhost:8080 /shei/a.html(b.html)这里shei与上面
绑定的参数有关系(重点)
案例:
const express = require('express');
varserver = express();
server.use('/home',require('./r1.js')()); //绑定路由
server.use('/sing',require('./r2.js')()); //绑定路由
server.listen(8080);
建立俩个模板JS:
总结:建立俩个模板化JS用来分流;分别为r1.js r2.js,
我们在绑定路由的 server.use('/sing',require('./r2.js')()); 在网页上输入
http://localhost:8080 /sing/1.html
http://localhost:8080 /home/1.html
九.数据库 -------------npm install mysql 数据插件
语法:连接数据库:
var db = mysql.createPool({IP地址,用户名,密码,数据库名字})
1.曾: INSERT INTO 表名 VALUE()
INSERT INTO 表名 (KETS);(键值)
2.删:DELETE (KETS) 表名
DELETE FROM 表明 WHERE (KETS)
3.改:UPDATE 表明 SET(value) 替换的内容
4.查: SELECT (KETS)(*) FROM 表明 WHERE
SELECT(KETS)(*) FROM 表明 WHERE 条件LEVEL
案例:
const express =require('express');
const mysql = require('mysql'); // 连接数据库
var server = express();
const db = mysql.createPool({host:’localhost’,
user:’root’,password:’yangbaoxi789’,database:’lol’});
server.use(‘/’ ,function(req,res){
曾:
db.query(`INSERT INTO 表单名 VALUES ( 表单key值),(err,data)=>{
if(err){ res.status( 500 ).send( '服务器错误' ).end( ) }
else{ console.log('插入成功了',data); }
})
删:
db.query(`DELETE FROM 表单名WHEREid=3(key值)`,(err,date)=>{
if(err){ res.status( 500 ).send( '服务器错误' ).end( ) }
else{ console.log('删除成功了',data); }
})
改:
db.query(`UPDATE 表单名 SET username='lisi' (更改key = 内容)WHERE id=1(在这个key内)`,(err,data)=>{
if(err){ res.status( 500).send( '服务器错误' ).end( ) }
else{ console.log('更改成功了',data); }
})
查:
// * 代表查询所有,还可以换成key值
db.query(`SELECT * FROM 表单名` , (err,data)=>{
if(err){ res.status( 500 ).send( '服务器错误' ).end( ) }
else{ console.log('查询成功了',data); }
})
}) //总结束语句
十 . 自定义模板:
自定义模板内容:
md5加密 : -------------- crypto 加密模板
语法:1.引入模块(插件)
2.创建加密对象 var obj = crypto.createHash('md5');
3.obj.update('要加密的内容') 添加加密文字
4.返回加密结果obj.digest('hex'); 固定写法
模拟: const crypto = require('crypto'); //系统自带加密插件
var obj = crypto.createHash('md5'); // 创建一个加密对象
obj.update('123456'+'猪头'); // 添加要加密的文字
var str = obj.digest('hex'); // 返回加密后的结果
console.log(str);
案例: const common = require('./Libs/md5'); // 引入我们的模板
var str = '123456'; // 要加密的内容
var str = common.md5(common.MD5_SUFFIX+str); // 撒盐加密
console.log(str);
时间戳:
语法: var date = new Date(); // 创建一个时间对象
生成时间戳: date.getTime() //在控制台输出后
date.setTime()转换:(1495699678671)
将时间戳转变为可见的时间 有13位 跟10位
1. date.getFullYear() 年
2. date.getMonth()+1 月
3. date.getDate() 天
4. date.getHours() 时
5.date.getMinutes() 分
6. date.getSeconds() 秒
模拟:function two(n) { // 让不到十位数的数字成为十位数字
returnn<10?"0"+n:""+n;
}
var oDate = new Date();
oDate.setTime(1495699678671); // 我们在控制台获取的时间戳
var str =oDate.getFullYear()+"-"+two(oDate.getMonth()+1)+"-"+two(oDate.getDate())+""+two(oDate.getHours())+":"+two(oDate.getMinutes())+":"+two(oDate.getSeconds());
console.log(str)
十一 . 重定向:
语法:重定向实现服务器内部页面的跳转
在响应的时候 res. redirect(‘重定向的地址’)----/user /login
案例:const express = require('express'); //搭建服务器
var server = express();
var route = express.Router(); // 创建路由对象
route.use('/',function(req,res){ // 只要进入当前窗口就会被重定向
if(req.url != ‘/’){
res.redirect('/login');
}else{
res.send('我是主页面');
res.end();
}
})
route.use('/login',function(req, res){
res.send('我是被重定向的页面')
res.end();
});
server.use('/', route); // 绑定
server.listen(8080);
总结:执行js后,我们在网页输入http://localhost:8080 就会跳转到我们的主页面
当我们输入http://localhost:8080/wed(其他的网页路径时)会自动跳转到我们重定向的
网页http://localhost:8080/ login页面
十二 . 文本段落处理
案例:const express = require('express');
const mysql =require('mysql');
constconsolidate = require('consolidate');
const ejs =require('ejs');
var server = express();
//配置模板引擎
server.set('view engine','html');
server.set('views','./temp');
server.engine('html',consolidate.ejs);
//连接服务器,
var db =mysql.createConnection({host:'localhost',user:'root', password:'yangbaoxi789',database:'student'});
server.use('/', function(req, res) { // 服务器走起
// 通过查询获取数据库中的内容
db.query(`SELECT content FROMarticle_table WHERE id=1`, (err, data)=>{
if (err) { res.status(500).send('database err').end();}
else { console.log(data[0].content); //[{content:'内容'}]
// 这就是我们将文本处理段落问题
var str=data[0].content.replace(/^/gm,'<p>').replace(/$/gm,'</p>');
res.render('01.ejs',{name:str});
}
})
})
server.listen(8080);
案例: 全面表单验证----post+路由分流+数据库
后台:
通过路由分流的JS(后台): ----这是自定义模板
前台:
总结:我们输入localhost:8080/user或者localhost:8080/1.html进入我们的登录界面,数据验证成功后跳转到我们的首页。