初学node 随笔

node

  • node运行文件(ctrl+c退出)
$ node <文件名>

在这里插入图片描述

  • 在node环境执行js代码
    命令行输入node进入node环境。两次ctrl+c退出
    在这里插入图片描述

REPL环境

  • R: read
  • E: eval
  • P:print
  • L: loop

创建服务

// 导入模块
const http = require('http')

// 创建服务
const server = http.createServer(function(req, res){
    res.end()
})

// 监听端口
server.listen(3000)

createServer()

接受一个参数 回调函数 callback

callback接受两个参数

  • 请求 request 客户端 -> 服务器端
  • 响应 response 服务器端 -> 客户端

end()

  • 结束响应
  • 参数可选
    • 接收一个参数,可以把它渲染到浏览器上
    • 服务端给客户端响应的内容
  • 如果没有end,浏览器的刷新一直处于转圈圈的状态,直到超时为止

response.write(data)

  • 第一个参数必选
  • 服务端给客户端发送的请求主体

writeHead设置请求头(对象)

  • 设置响应内容是平文本/html/js
res.writeHead(200,('Content-Type', 'text/plain')
  • 设置编码格式UTF-8
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})

setHeader(键值对)

  • 设置编码格式UTF-8
res.setHeader('Content-Type','text/html; charset=utf-8')

设置cookie

 res.setHeader("Set-Cookie",["username=1;password=86400","b=2;max-age=3600"]

优先级:writeHead高于setHeader

请求 request

  • request.url 请求地址
  • request.method 请求方法
  • request.httpVersion http版本号
简单路由跳转
let _url = req.url;
if (_url === '/') {
    res.write('<h1>首页</h1>')
    res.end()
} else if (_url === '/list'){
    res.write('<h1>列表页</h1>')
    res.end()
} else if (_url === '/detail'){
    res.write('<h1>详情</h1>')
    res.end()
} else if (_url === '/order'){
    res.write('<h1>订单</h1>')
    res.end()
} else {
    res.write('<h1>404</h1>')
    res.end()
}

listen()

  • 第一个参数:监听的端口号
  • 第二个参数:监听的IP地址
  • 第三个参数:回调函数

querystring()

querystring.parse()

将字符串解析为对象格式,
如:

querystring.parse('username=a&password=123')
//{username:'a',password='123'}
  • 第一个参数 必传 要解析的字符串
  • 第二个参数 选传 键值对中间的符号,默认是&
  • 第三个参数 选传 键和值中间的符号,默认是=
querystring.stringify()

将对象格式解析为字符串,与querystring.parse()作用相反


url模块

url.parse()

将字符串解析成为字符串对象

  • 第一个参数 必传 地址字符串
  • 第二个参数 可传 url.parse(req.url,true)如果值为true,会将字符串对象的query属性用querystring.parse()转成对象
const http = require('http')
const url = require('url')
http.createServer((req, res) => {
    if (req.url == '/favicon.ico') {return}
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    let newUrl = url.parse(req.url, true)
    let userinfo = newUrl.query
    let username = userinfo.username
    let password = userinfo.password
    if (username === 'admin') {
        res.end('<h1>超级管理员</h1>')
    } else {
        res.end('<h1>普通用户</h1>')
    }
}).listen(3000, () => {
    console.log('server is running on localhost:3000')
})

GET 和 POST

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; 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://192.168.0.18:3000/" method="POST" accept-charset="UTF-8">
        登录<input name='name' type="text"><br>
        注册<input name='password' type="password"><br>
        <input class="btn" type="submit" value="提交">
    </form>
</body>
</html>

GET

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

http.createServer((req, res) => {
    if (req.url == '/favicon.ico') {return}

    res.setHeader('Content-Type', 'text/html;charset=utf-8')


    let newUrl = url.parse(req.url, true)
    let userinfo = newUrl.query
    let username = userinfo.username
    let password = userinfo.password
    if (username === 'admin') {

        res.end('<h1>超级管理员</h1>')
    } else {
        res.end('<h1>普通用户</h1>')
    }

    
}).listen(3000, () => {
    
    console.log('server is running on localhost:3000')
})

POST

const http = require('http')
const server = http.createServer()

server.on('request', (req,res) =>{
    /*
        当有数据提交的时候  会触发data事件
        callback接收一个参数  参数 -> buffer对象  -> 转换为字符换    buffer对象.toString()
        如果接收的内容非常多,node会将其分割成为小片段,再拼接起来
        需要我们在请求结束的时候,再去拿data数据
    */
   let str = ''
    // 监听请求的数据
    req.on('data', function(data) {
        str += data.toString()
    })
    // 监听请求结束的事件
    req.on('end', function(){
        console.log(str)
    })
    res.end('ok')
})
server.listen(3000, () => {
    console.log('server is running on localhost')
})

buffer

全局环境下的一个对象
处理二进制流数据

toString

将buffer 对象转换为字符串

events

  • 引入 const EventEmitter = require('events')
  • 继承 class MyEmitter extends EventEmitter {}
  • 实例化 const myEmitter = new MyEmitter
const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter

myEmitter.on('xuexi',() => {
    console.log('xuexi')
})
myEmitter.emit('xuexi')

fs

两个全局变量

__filename
  • 文件的绝对路径
__dirname
  • 文件所在文件夹的绝对路径

读文件

fs.readFile(path[, options], callback)

异步读取文件内容

  • 必选参数一 文件所在路径
  • 必选参数二 错误优先的回调函数
    • 参数一 err
    • 参数二 返回的数据
const fs = require('fs')
fs.readFile('../src/fs01.txt',(err,data) => {
    if(!err){
        console.log(data.toString())
    }else if (err) {
        throw err
    }
})

callback采用错误优先机制

fs.readFileSync(path[, options])

返回值是文件的内容

const fs = require('fs')

var data=fs.readFileSync('../src/fs01.txt')
console.log("readFileSync"+data.toString())

写文件

fs.writeFile(file, data[, options], callback)

fs.writeFile('../src/fs01.txt',data,{
    flag: 'a+'   //写入方式为追加
}, (err) => {
    if (err) throw err;
    console.log('文件已保存');
})

fs.writeFileSync(file, data[, options])

fs.writeFileSync('../src/fs01.txt', 'data')

options <Object> | <string>

  • encoding <string> | <null> 默认为 ‘utf8’。
  • mode <integer> 默认为 0o666。
  • flag <string> 默认为 ‘w’。(写入方式)

在这里插入图片描述

爬虫

// axios
// cheerio
// npm安装 npm i axios cheerio --save
const http = require('http')
const axios = require('axios')
const cheerio = require('cheerio')
const server = http.createServer()
//想要爬的网址
const Url = 'https://read.qidian.com/chapter/12sqXj4zfaecikCo3ZPkrg2/7ZLQ7fqZcp1OBDFlr9quQA2/'

server.on('request',(req,res) => {
    res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})
    axios
        .get(Url)
        .then((data)=>{
            // console.log(data.data)
            const $ = cheerio.load(data.data)
            let str=''
            let $title = $('.read-content').children()
            $title.each((index,item) => {
                let title = $(item).text()
                str += `${title}<br/>`
            })
            res.end(str)
        })
})
server.listen(3000)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值