NodeJS的简单笔记

Node.js

学习网站:

(https://www.bilibili.com/video/av16249662/?p=15)

http模块

使用是使用

var http=require("http");
http.createServer(function(req,res){
	console.log("人来了");
}).listen(8080)

req.url表示请求的地址

文件操作fs

fs读文件

fs.read('文件名'function(err,data){
if(err){
	console.log("wrong");
}
else(
	res.write(data);
	console.log(data.toString());
)
})

通过url读写文件

代码如下:

var fs=require("fs");
 http.createServer(function (req, res) {
    var file=req.url.split('/');
     fs.readFile(file[1],function(err,data){
         if(err){
             res.end("wrong 404");
             console.log(req.url);
             console.log(file[1])
         }
         else{
             res.write(data);
         }
     })
 }).listen(8080);

Get方式获取数据

数据在url中,通过url获取数据。

querystring模块可以对数据部分进行解析,但不够方便。(因为需要先解析出数据部分)。

js代码如下所示:

const http = require('http');
const urllib=require('url');

http.createServer(function (req, res) {
    var obj=urllib.parse(req.url,true);
    var url=obj.pathname;
    var GET=obj.query;
    console.log(url);
    console.log("shdasdas");
    console.log(req.url)
    console.log(GET,url.pathname);
    res.write('522543245');
    res.end();
}).listen(8080);

引入url模块,它能解析url请求,其中的query和pathname就是我们需要的内容

html代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="http://localhost:8080" method="GET">
        <input type="text" name="user">
        <input type="password" name="pass">
        <input type="submit" value="提交">
    </form>
</body>
</html>

对于Get请求,一般使用url模块进行解析。

Post数据

post数据比get数据大得多,所以可能会分多次发送。

data —一段数据到达

end — 全部到达

代码如下

var http=require("http");
http.createServer(function(req,res){
    var str='sfds';//接受数据
    req.on('data',function(data){
        str=str+data;
    });//触发事件
    req.on('end',function(){
        console.log(str);
    })
    res.end("Yes");
}).listen(8080);

模块化

  1. require ------引入其他模块
  2. exports -------单个输出
  3. module -------批量输出
  4. .js是可选的
  5. npm:NodeJsPackage(NodeJs管理器)

npm

  1. 统一下载途径
  2. 自动下载依赖

如何下载模块:

npm install xxx(模块名) 在cmd中运行即可下载模块。


Express

方法

  1. get(’/’,functioa(req.rres){});
  2. post(’/+url’,function(req,res){});
  3. ues(’/+url’,function(req,res){});

ues方法可以代替get和post方法

url.query可以解析Get数据。

url.body解析的是Post数据,需要先用server.use(bodyparser.urlencoded({}))处理。

代码示例:

var express=require("express");
var server=expres();
server.use('/1.html',function(req,res){
    res.send("hello 1.html");
    res.end();
})
server.use('2.html',function(req,res){
    res.send("hello 2.html");
    res.end();
})
server.listen(8080);

在express框架中,读写文件操作没有改变。也可以使用中间件express-static读文件。

fs读文件:

var express=require("express");
var http=require("http");
var fs=require("fs");
var server=express();
server.use('/1.html',function(req,res){
    fs.readFile("1.html",function(err,data){
        if(err){
            res.send("wrong");
        }
        else{
           res.send(data);
        }
        res.end();
    })
})
server.listen(8080);
中间件express-static读文件:
var express=require("express");
var http=require("http");
var fs=require("fs");
var expressStatic=require("express-static");//引入中间件
var server=express();
server.use(expressStatic("x"));//x代表文件夹名;不能直接给文件名;在url中给出文件名,就可以访问该文件。
server.listen(8080);
body-parser处理数据:

需要先用server.use(bodyparser.urlencoded({}))处理

var express=require("express");
var expressStatic=require("express-static");
var bodyParser=require('body-parser');

var server=express();
server.listen(8080);

server.use(bodyParser.urlencoded({}));

server.use('/',function(req,res){
    console.log(req.body);
})
urlencoded({})中的参数:

extended: 值位ture时就是扩展模式,为false时就是非扩展模式。

limit: 默认是100k,以k为单位。

链式操作

server.use('/',function(req,res,next){
    console.log("b");
    next();
})//该语句构成链式操作

cookie

在浏览器保存一些数据,每次向服务器请求时都会带上。不安全。大小有限(4k)。

  1. 读取 需要cookie-parser

    var express=require("express");
    var cookieparser=require("cookie-parser");//引入cookie-parser模块
    
    var server=express();
    server.use(cookieparser());//先处理,再使用。
    server.use('/aaa',function(req,res){
        console.log(req.cookies);
        res.send("OK");
    })
    
    server.listen(8080);
    
  2. 写cookie:

    var express=require("express");
    var server=express();
    server.use('/',function(req,res){
        res.cookie('user','blue',{path:'/aaa',maxAge:30*24*3600*1000});
        res.send("OK");
    })
    server.listen(8080);
    

    res.cookie(‘名称’,‘值’,{path:‘路径’,maxAge:保存时间(以毫秒为单位)});

给cookie签名:作用是防止cookie被改。

req.secret='字符串';
res.cookie("值""属性"{singed:true});

删除cookie:

server.use(cookieparser());//先处理,再使用。
server.use('/aaa',function(req,res){
    res.clearCookie('名称');
    res.send("OK");
})

session

保存在服务端,大小无限(与服务器有关)。比cookie安全。

  1. 读取 需要cookie-session
  2. 需要先解析cookie
  3. keys数组越长越安全
  4. delete 删除session

示例代码:

var express=require("express");
var cookieparser=require("cookie-parser");
var cookiesession=require("cookie-session");//引入中间件

var server=express();
server.use(cookieparser());
server.use(cookiesession({
    name:'blue',
    keys:["aaa","bbb","ccc"],//必须设置keys数组,否则报错。 
    maxAge:2*3600*1000
}));
server.use('/',function(req,res){
    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 -------破坏式 侵入式

根据缩进确定层级关系

var jade=require("jade");
var str=jade.render('html');//渲染成html格式
console.log(str);

渲染jade文件:

var jade=require("jade");

var str=jade.renderFile('1.jade',{pretty:true});//需要加{prett:ture}形成html格式
console.log(str);

jade文件样式:

html
    header
        style
        script
    body
        div
            ul
                li
                li 
                li
        div

ejs ---------非破坏式

var ejs=require("ejs");
ejs.renderFile('1.ejs',{name:'blue'},function(err,data){
    if(err){
        console.log("失败");
    }
    else{
        console.log(data);
    }
})

ejs样式:

我的名字:<%= name %>

route路径

router.use()

router.get()

router.post()

据此可以实现对不同路径下文件的访问,拆解服务(子服务)。

var router=express.Router();
servcer.ues('/',router);//向‘/’路径下添加router

代码示例:

var express=require("express")
var server=express();
server.listen(8080);

var router=express.Router();

router.get('/1.html',function(req,res){
    res.send("hello");
})
router.get('/2.html',function(req,res){
    res.send('kkkkk');
})

server.use('/',router);//在‘/’路径下访问1.html或2.html

数据库

sql命令尽量使用大写

增 ——INSERT

删 ——DELETE

改 ——UPDATAE

查 —— SELECT

查的代码示例:

var mysql=require('mysql');
var db=mysql.createConnection({host:'localhost',
                               user:'root',password:'123456',database:'20190930'});

db.query("select * from usertable;",(err,data)=>{
    if(err){
        console.log("失败",err);
    }
    else{
        console.log("成功了\n",data);
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值