使用node.js 搭建个人博客 去了解框架的底层原理 (五)

1创建项目

创建文件夹 blog-b

2初始化项目 

cd 到项目目录 

npm init -y

3 下载 nodemon  ,使每次修改项目后 自动重启项目

npm i nodemon cross-env --save-dev

在 blog-b\package.json 文件中 配置 启动设置

  "dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js",
  "prd": "cross-env NODE_ENV=production nodemon ./bin/www.js"

可以通过 

npm run dev

npm run prd

启动项目 

之所以 配置两个 ,是因为  线上 和 线下 配置的 ip 端口号  数据库 配置不同.

4 划分项目

新建 app.js和bin 文件和 src 文件

app.js  放所有代码统一请求的处理

src 放 业务代码

bin 放 程序的启动文件

 

5 编写项目的启动文件

在 bin中创建 www.js 文件

/**
 * 此文件只写 服务的基本代码
 */

 //引入 http 模块
const http = require('http');

//引入app模块
const serverHandle = require("../app");

//设置端口号
const PORT= 8004;

//创建服务
const server= http.createServer(serverHandle);

//设置端口号
server.listen(PORT)

 6 编写 app.js

const queryString = require('querystring');
const handlerBlogRouter = require('./src/router/blog');
const handlerUserRouter = require('./src/router/user');
/**
 * 对所有请求 相同部分进行统一的处理
 */
const serverHandle =(req,res)=>{
    //设置返回时客户端接受格式
    res.setHeader('Content-type', 'application/json');
    const url = req.url;
    //切割请求的url 
    req.path = url.split('?')[0];//获取请求的路由
    req.query = queryString.parse(url.split('?')[1]);//将get请求发送过来的数据映射成对象

    //对路由进行分离, 封装业务逻辑
    //博客请求的路由 
    const blogResult = handlerBlogRouter(req, res);
    if(blogResult){
        res.end(JSON.stringify(blogResult));
        return;     
    }

    //用户路由
    const userData = handlerUserRouter(req, res);
    if (userData) {
        res.end(
            JSON.stringify(userData)
        );
        return;
    }


     //路由无法匹配 返回404
    res.writeHead(404, { "Content-type": "text/plain" });
    res.write("404 Not Found\n");
    res.end()
}

module.exports = serverHandle

7在 src 分为 路由层和业务成 

在 src 创建router文件夹 ,路由分为 博客相关的路由和 用户相关的路由 ,所以创建 blog.js 和user.js;

 blog.js

const { SuccessModel, ErrorModel } = require('../model/resModel');

const handleBlogRouter = (req, res) => {
    const method = req.method;
    
    const id = req.query.id;

    //获取博客列表
    if (method === 'GET' && req.path === '/api/blog/list') {
        return SuccessModel(
            {
                "title": "标题",
                "": "作者",
                "content":"内容",
            }
        );
    }

    //获取指定博客
    if (method === 'GET' && req.path === '/api/blog/detail') {
        return SuccessModel("获取指定博客") 

    }

    //新建博客
    if (method === 'POST' && req.path === '/api/blog/new') {
        return SuccessModel("新建博客")

       
    }
    //更新博客
    if (method === 'POST' && req.path === '/api/blog/update') {
        return SuccessModel("更新博客")

    }

     //删除博客
    if (method === "POST" && req.path === '/api/blog/del') {
        return SuccessModel("删除博客")
      
    }

};

module.exports = handleBlogRouter;

user.js

const { SuccessModel, ErrorModel } = require('../model/resModel');

const handleUserRouter = (req, res) => {
    if (method === "POST" && req.path === "/api/user/login") {        
        return new SuccessModel()
    }

};

module.exports = handleUserRouter;

 8 为了统一返回的格式 ,对返回 数据进行一层封装

在src 下创建 model 文件夹, 这model 文件夹下创建 resModel.js

class BaseModel {
    constructor(data, message) {
        if (typeof data === 'string') {
            this.message = data;
            data = null;
            message = null;
        }
        if (data) {
            this.data = data
        }
        if (message) {
            this.message = message
        }
    }
}

class SuccessModel extends BaseModel {
    constructor(data, message) {
        super(data, message);
        this.errno = 0
    }
}

class ErrorModel extends BaseModel {

    constructor(data, message) {
        super(data, message);
        this.errno = -1

    }
}

module.exports = {
    SuccessModel,
    ErrorModel
};

现在可以测试各个路由是否畅通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值