node原生学习--写一个简单的服务器

node笔记

nodejs换句话来说,就是服务器,是用来写服务器的js,优秀的中间层

对于node来说,模块就是一切,学node就是学各种模块的使用

1. 响应请求

在这里插入图片描述

2. 数据交互

HTTP 1.0 规定通信如何进行
接收浏览器的get数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接收浏览器的post数据
分多次发给服务器的,就是分段发(多大,由协议,协商,配置决定),因为post大,没法一次发.
所以要监听接收
在这里插入图片描述
get和post结合:

const http = require('http');
const url = require('url');
const querystring = require('querystring');
const fs = require('fs');

http.createServer((req, res) => {
    let path = '', get = {}, post = {};

    if (req.method == 'GET') {
        let { pathname, query } = url.parse(req.url, true);

        path = pathname;
        get = query;
        complete();
    } else if (req.method == 'POST') {
        path = req.url;

        let arr = [];
        req.on('data', buffer => {
            arr.push(buffer);
        });
        req.on('end', () => {
            let buffer = Buffer.concat(arr);

            post = querystring.parse(buffer.toString());
            complete();
        });
    }

    function complete() {
        console.log(path, get, post);
    }
}).listen(8080);

在这里插入图片描述

const http = require('http');
const url = require('url');
const querystring = require('querystring');
const fs = require('fs');

let users = {};

http.createServer((req, res) => {
    let path = '', get = {}, post = {};

    if (req.method == 'GET') {
        let { pathname, query } = url.parse(req.url, true);

        path = pathname;
        get = query;
        complete();
    } else if (req.method == 'POST') {
        path = req.url;

        let arr = [];
        req.on('data', buffer => {
            arr.push(buffer);
        });
        req.on('end', () => {
            let buffer = Buffer.concat(arr);

            post = querystring.parse(buffer.toString());
            complete();
        });
    }

    function complete() {
        if (path == '/reg') {
            let { username, password } = get;

            if (users[username]) {
                res.write(JSON.stringify({ error: 1, msg: '此用户名已存在' }));
                res.end();
            } else {
                users[username] = password;

                res.write(JSON.stringify({ error: 0, msg: '' }));
                res.end();
            }
        } else if (path == '/login') {
            let { username, password } = get;

            if (!users[username]) {
                res.write(JSON.stringify({ error: 1, msg: '找不到此用户' }));
                res.end();
            } else if (users[username] != password) {
                res.write(JSON.stringify({ error: 1, msg: '密码不对' }));
                res.end();
            } else {
                res.write(JSON.stringify({ error: 0, msg: '' }));
                res.end();
            }
        } else {
            fs.readFile(`www${path}`, (err, buffer) => {
                if (err) {
                    res.writeHeader(404);
                    res.write('Not Found');
                    res.end();
                } else {
                    res.write(buffer);
                    res.end();
                }
            });
        }
    }
}).listen(8080);

定义模块
在这里插入图片描述
module为了让exports可以赋值
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值