位置: IT常识 - 正文

【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)(nodejs官方文档)

编辑:rootadmin
【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)

推荐整理分享【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)(nodejs官方文档),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejsorg,node.js ts,nodejs官方文档,node.js ide,node.js in action,node.js document,node.js in action,node.js文档,内容如对您有帮助,希望把文章链接给更多的朋友!

个人简介

👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿 offer(秋招) 🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js

Node.js系列文章目录内容参考链接Node.js(一)初识 Node.js文章目录Node.js系列文章目录一、http 请求概述二、处理请求1、处理 get 请求2、处理 post 请求三、搭建开发环境1、搭建环境2、安装 nodemon四、开发路由1、初始化路由2、使用 Promise 读取文件五、写在最后一、http 请求概述DNS 解析,建立 TCP 连接,发送 http 请求server 接收 http 请求,处理,并返回客户端接收到返回数据,处理数据(如渲染页面,执行 JS)二、处理请求1、处理 get 请求get 请求,即客户端要向 server 端获取数据,如查询博客列表通过 querystring 来传递数据,如 a.html?a=100&b=200浏览器直接访问,就发送 get 请求

示例:GET 请求

// 获取 node.js 提供的原生 http 模块const http = require('http')const querystring = require('querystring')// 创建服务const server = http.createServer((req, res) => { console.log('method: ', req.method) // GET const url = req.url // 获取请求的完整 url console.log('url: ', url) req.query = querystring.parse(url.split('?')[1]) // 解析 querystring console.log('query: ', req.query) res.end(JSON.stringify(req.query)) // 将 querystring 返回})// 监听端口server.listen(8000)console.log('OK')

2、处理 post 请求post 请求,即客户端要像服务端传递数据,如新建博客通过 post data 传递数据浏览器无法直接模拟,需要手写 js,或者使用 postman

示例:POST 请求

const http = require('http')// 创建服务const server = http.createServer((req, res) => {// POST 请求 if (req.method === 'POST') { // req 数据格式 console.log('req content-type', req.headers['content-type']) // 接收数据 let postData = '' // 每次来数据都会触发 data 事件 req.on('data', chunk => { postData += chunk.toString() }) req.on('end', () => { console.log('postData: ', postData) res.end('hello world') }) }})// 监听端口server.listen(8000)console.log('OK')

测试:使用 postman 或者 ApiPost

三、搭建开发环境从 0 开始搭建,不使用任何框架使用 nodemon 监测文件变化,自动重启 node使用 cross-env 设置环境变量,兼容 windows mac 和 linux1、搭建环境

文件格式如下:

更改 main 的值:

app.js 文件

const serverHandle = (req, res) => { // 设置返回格式 JSON res.setHeader('Content-type', 'application/json') // 返回的数据 const resData = { name: '杂货铺', site: 'CSDN' } // 服务器端要返回给客户端的数据 res.end( JSON.stringify(resData) )}// 模块化 把 serverHandle 暴露出去module.exports = serverHandle

www.js 文件

const http = require('http')// 端口const PORT = 8000// 引入 app.jsconst serverHandle = require('../app')// 创建服务const server = http.createServer(serverHandle)// 监听端口server.listen(PORT)

在当前文件夹路径下终端键入 node bin/www.js 启动服务,打开 8000 端口

2、安装 nodemon

nodemon 作用:可以监控文件变化,自动重启,无需手动

安装 nodemon,终端键入如下命令:

npm install nodemon cross-env --save-dev

在 package.json 中 添加 如下内容(测试环境,兼容多种操作系统):

四、开发路由1、初始化路由初始化路由:根据技术方案的设计,做出路由返回假数据:将路由和数据处理分离,以符合设计规则【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)(nodejs官方文档)

示例:开发接口,并测试使用

文件格式如下:

www.js 文件

创建服务,监听端口最终 nodemon ./bin/www.js 运行就是在此文件位置const http = require('http')// 端口const PORT = 8000// 引入 app.jsconst serverHandle = require('../app')// 创建服务const server = http.createServer(serverHandle)// 监听端口server.listen(PORT)

app.js 文件

整合的文件处理 blog 和 user 的相关接口const handleBlogRouter = require('./src/router/blog')const handleUserRouter = require('./src/router/user')const serverHandle = (req, res) => { // 设置返回格式 JSON res.setHeader('Content-type', 'application/json') // 获取 path const url = req.url req.path = url.split('?')[1] // 获取 ? 的后半部分 // 处理 blog 路由 const blogData = handleBlogRouter(req, res) if (blogData) { res.end( JSON.stringify(blogData) ) return } // 处理 user 路由 const userData = handleUserRouter(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()}// 模块化 把 serverHandle 暴露出去module.exports = serverHandle

blog.js 文件

博客相关接口最后暴露出去const handleBlogRouter = (req, res) => { const method = req.method // GET POST // 获取博客列表 if (method === 'GET' && req.path === '/api/blog/list') { return { msg: '这是获取博客列表的接口' } } // 获取博客详情 if (method === 'GET' && req.path === '/api/blog/detail') { return { msg: '这是获取博客详情的接口' } } // 新建一篇博客 if (method === 'POST' && req.path === '/api/blog/new') { return { msg: '这是新建博客的接口' } } // 更新一篇博客 if (method === 'POST' && req.path === '/api/blog/update') { return { msg: '这是更新博客的接口' } } // 删除一篇博客 if (method === 'POST' && req.path === '/api/blog/delete') { return { msg: '这是删除博客的接口' } }}module.exports = handleBlogRouter

user.js 文件

登录相关接口最后暴露出去const handleUserRouter = (req, res) => { const method = req.method // 登录 if (method === 'POST' && req.path === '/api/user/login') { return { msg: '这是登录接口' } }}module.exports = handleUserRouter

测试如下:

获取博客列表:

获取博客详情:

资源未找到 404:

2、使用 Promise 读取文件

示例:使用 Promise 读取三个 json 文件

a.json 文件

{ "next": "b.json", "msg": "this is a"}

b.json 文件

{ "next": "c.json", "msg": "this is b"}

c.json 文件

{ "next": null, "msg": "this is c"}

index.js 文件

封装获取文件内容的函数依次读取文件内容const fs = require('fs')const path = require('path')// 用 promise 获取文件内容function getFileContent(fileName) { const promise = new Promise((resolve, reject) => { // 获取文件全名, __dirname 表示当前文件所在的目录 const fullFileName = path.resolve(__dirname, 'files', fileName) // 读取文件 fs.readFile(fullFileName, (err, data) => { // 失败 if (err) { reject(err) return } // 成功 resolve( JSON.parse(data.toString()) ) }) }) // 返回 promise 实例 return promise}// then 的链式调用getFileContent('a.json').then(aData => { console.log('a data', aData) return getFileContent(aData.next)}).then(bData => { console.log('b data', bData) return getFileContent(bData.next)}).then(cData => { console.log('c data', cData)})

终端键入 nodemon index.js 测试结果如下:

五、写在最后

至此,我们学会了请求的处理,搭建开发环境以及路由的开发。继续跟进学习吧!

后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】

如果你需要该项目的 源码,请通过本篇文章最下面的方式 加入 进来~~

本文链接地址:https://www.jiuchutong.com/zhishi/300667.html 转载请保留说明!

上一篇:jQuery 获取与设置 元素属性【一篇文章轻松拿下】(jquery获取值的几种方法)

下一篇:前端开发——JavaScript的条件语句(java前端开发是做什么的)

  • 荣耀x10能用4g卡吗(荣耀x10可插几张卡)

    荣耀x10能用4g卡吗(荣耀x10可插几张卡)

  • 微信声音锁在哪(微信声音锁在哪里关闭)

    微信声音锁在哪(微信声音锁在哪里关闭)

  • 苹果11电信卡信号不好怎么回事(苹果11电信卡信号满格为什么数据用不了)

    苹果11电信卡信号不好怎么回事(苹果11电信卡信号满格为什么数据用不了)

  • 电脑键盘膜有必要贴吗(电脑键盘膜是贴上去的吗?)

    电脑键盘膜有必要贴吗(电脑键盘膜是贴上去的吗?)

  • 微信怎么屏蔽群消息(微信怎么屏蔽群语音通话)

    微信怎么屏蔽群消息(微信怎么屏蔽群语音通话)

  • 在抖音给同一个人连续点赞会怎样(抖音给同一个主播刷礼物的人一般能坚持多久)

    在抖音给同一个人连续点赞会怎样(抖音给同一个主播刷礼物的人一般能坚持多久)

  • 华为p40pro屏幕边缘发绿(华为P40PRO屏幕边一条绿线)

    华为p40pro屏幕边缘发绿(华为P40PRO屏幕边一条绿线)

  • 苹果照片为什么同步不了(苹果照片为什么会动)

    苹果照片为什么同步不了(苹果照片为什么会动)

  • 小米蓝牙耳机2和2s的区别(小米蓝牙耳机2se怎么连接)

    小米蓝牙耳机2和2s的区别(小米蓝牙耳机2se怎么连接)

  • lraal00是什么型号的(lyaal00是什么型号)

    lraal00是什么型号的(lyaal00是什么型号)

  • 文件抄送是什么意思(文件里面的抄送是什么意思)

    文件抄送是什么意思(文件里面的抄送是什么意思)

  • 演示机和正常机的区别(演示机和正常机哪个好)

    演示机和正常机的区别(演示机和正常机哪个好)

  • 微信朋友圈怎么设置一些人可看(微信朋友圈怎么定位到别的城市)

    微信朋友圈怎么设置一些人可看(微信朋友圈怎么定位到别的城市)

  • 电脑屏幕壁纸如何设置(电脑屏幕壁纸如何锁定)

    电脑屏幕壁纸如何设置(电脑屏幕壁纸如何锁定)

  • 开团提醒有危险吗(什么叫开团提醒)

    开团提醒有危险吗(什么叫开团提醒)

  • 手机怎么创qq群(手机怎么创qq群号)

    手机怎么创qq群(手机怎么创qq群号)

  • 七天网络如何授权(七天网络怎么登录注册授权)

    七天网络如何授权(七天网络怎么登录注册授权)

  • 怎样关闭搜索历史(关闭搜索历史)

    怎样关闭搜索历史(关闭搜索历史)

  • windows错误蓝屏怎么办(win10蓝屏系统错误)

    windows错误蓝屏怎么办(win10蓝屏系统错误)

  • ipad下载爱奇艺要付费吗(ipad下载爱奇艺为什么是小屏幕)

    ipad下载爱奇艺要付费吗(ipad下载爱奇艺为什么是小屏幕)

  • 红米k20pro防不防水(红米k20por防水吗)

    红米k20pro防不防水(红米k20por防水吗)

  • 天眼查多久更新一次(天眼查多久更新工商网数据)

    天眼查多久更新一次(天眼查多久更新工商网数据)

  • 鸿蒙怎么绑定电子身份证?鸿蒙绑定电子身份证教程(鸿蒙怎么添加)

    鸿蒙怎么绑定电子身份证?鸿蒙绑定电子身份证教程(鸿蒙怎么添加)

  • InCDsrv.exe是什么进程 作用是什么 InCDsrv进程信息(.inc是什么文件)

    InCDsrv.exe是什么进程 作用是什么 InCDsrv进程信息(.inc是什么文件)

  • 比肩ChatGPT的国产AI:文心一言——有话说(比肩美国)

    比肩ChatGPT的国产AI:文心一言——有话说(比肩美国)

  • PHPCMS用哪个数据库比较好?(phpcms怎么用)

    PHPCMS用哪个数据库比较好?(phpcms怎么用)

  • 个人出售普通住宅应当缴纳哪些税
  • 企业所得税的纳税人发生年度亏损的时间
  • 计提本月所得税费用怎么算
  • 印花税可以申报以前年度吗
  • 企业所得税1季度申报季初从业人数个税所属期12月
  • 收到投资款怎么做账
  • 核定征收的固定资产包括
  • 季报利润表本期数
  • 公司给离职员工多发工资怎么办
  • 企业会计准则和新会计准则的区别
  • 销项负数发票用勾选吗
  • 房地产开发桩基施工方案
  • 购置税交了发票能作废吗
  • 三级科目称为子目吗
  • 国际货运代理免税
  • 工程领用工程物资180万元
  • 2020深圳增值税税率是多少
  • 权益性投资损失包括哪些
  • 股权转让能否低于股价
  • 处置的固定资产
  • 研发人员工资加计扣除
  • 公司员工驻外补贴政策
  • 某公司购入一台需要安装的生产设备
  • spss安装后无法启动许可证授权向导
  • 旅游业小规模差额计税的能开1%
  • 本期已缴税额不能大于本期应纳税额
  • 会计分录中结转成本
  • 销售折扣单独开票
  • Win7系统如何创建宽带连接
  • 个人所得税手续费比例
  • 503错误的原因和解决方法
  • 苹果手机系统升级后电量消耗快
  • 税控机抵减增值税税额
  • 什么情况下计提信用减值损失
  • 处置固定资产的增值税怎么处理
  • 支付职工教育经费
  • openapi官网
  • 政府会计公共基础设施分类
  • 原材料被盗如何报案
  • 季节性用工法律规定
  • mongodb快速入门
  • 个人重组债务怎么交税
  • 如何拉企业纳税申报表
  • 房地产预缴增值税计算公式
  • 城镇土地使用税暂行条例
  • 劳动保护费是否可以抵扣
  • 外购产品对外捐赠的会计处理方法
  • 公司自己搭建的房子出租可以按投资性房地产吗
  • 财务费用贷方余额怎么结转本年利润
  • 公司购买银行理财产品怎么做账
  • 公司收到股东的投资款以后怎么处理
  • 印花税多久申报一次2023
  • 无发票临时工劳务费账务处理
  • 企业弥补亏损的顺序
  • 发票已经认证是什么意思
  • 汽车销售企业营销策略
  • 营改增问题解答
  • 如何记账固定资产成本
  • mysql数据库简单介绍
  • mysql如何实现主从复制的具体流程
  • linux.iso在哪里
  • .exe是什么意思
  • mac电脑怎么装win10
  • linux卸载安装
  • 收不到windows的验证码
  • window八
  • 快速掌握阅读题的技巧
  • unity一运行就停止工作
  • linux tar -zxf
  • unity3d官方教程
  • javascript高级程序设计最新版
  • js判断时间差
  • jquery属性选择器,选取所有带href
  • 基于javascript创建导航页面
  • 车船税每年多少钱
  • 怎么判断买的盐是不是真的
  • 税务局 环保税
  • 盐城滨海人口
  • 怎么打印个人所得税扣缴申报表
  • 开原航天医院官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设