位置: IT常识 - 正文

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

发布时间:2024-01-17
【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前端开发是做什么的)

  • 怎样利用QQ群推广自己的网店?(怎么在qq群里推荐好友)

    怎样利用QQ群推广自己的网店?(怎么在qq群里推荐好友)

  • iphone12有几个扬声器呢(ip12几个扬声器)

    iphone12有几个扬声器呢(ip12几个扬声器)

  • 天猫魔盒有线连接设置方法(天猫魔盒有线连接怎么投屏)

    天猫魔盒有线连接设置方法(天猫魔盒有线连接怎么投屏)

  • 微信新功能深色模式怎么设置(微信的深色)

    微信新功能深色模式怎么设置(微信的深色)

  • 微信撤回不了怎么补救(微信撤回不了怎么补救不让对方看见)

    微信撤回不了怎么补救(微信撤回不了怎么补救不让对方看见)

  • 华为微信夜间模式怎么设置(华为微信夜间模式怎么设置回来)

    华为微信夜间模式怎么设置(华为微信夜间模式怎么设置回来)

  • 怎么把两个表格的数据合并在一起(怎么把两个表格里面相同的内容匹配出来)

    怎么把两个表格的数据合并在一起(怎么把两个表格里面相同的内容匹配出来)

  • 抖音能定位对方位置吗吗(通过抖音能定位到这个人吗)

    抖音能定位对方位置吗吗(通过抖音能定位到这个人吗)

  • dc接口是什么意思(dc接口规格)

    dc接口是什么意思(dc接口规格)

  • usb虚拟打印机端口是什么意思(usb虚拟打印机端口配置错误)

    usb虚拟打印机端口是什么意思(usb虚拟打印机端口配置错误)

  • 苏宁易购自营店是什么意思(苏宁易购自营店手机是正品吗)

    苏宁易购自营店是什么意思(苏宁易购自营店手机是正品吗)

  • 京东漏发货如何处理(京东漏发货如何补救)

    京东漏发货如何处理(京东漏发货如何补救)

  • 苹果11备忘录在哪里(苹果11备忘录在哪里找出来)

    苹果11备忘录在哪里(苹果11备忘录在哪里找出来)

  • 通知显示消息预览是什么意思(信息显示提醒)

    通知显示消息预览是什么意思(信息显示提醒)

  • gpu渲染是什么意思(gpu渲染是什么意思呀)

    gpu渲染是什么意思(gpu渲染是什么意思呀)

  • ipad保修多久(iPad保修多久)

    ipad保修多久(iPad保修多久)

  • i音乐里面怎么收藏歌曲(怎么在i音乐里唱歌)

    i音乐里面怎么收藏歌曲(怎么在i音乐里唱歌)

  • vue可以添加照片吗(vue在图片上增加文字)

    vue可以添加照片吗(vue在图片上增加文字)

  • 华为怎么设置悬浮(华为怎么设置悬浮键盘)

    华为怎么设置悬浮(华为怎么设置悬浮键盘)

  • 携程买票怎么取消附加产品(携程买票怎么取消)

    携程买票怎么取消附加产品(携程买票怎么取消)

  • 拼多多怎么取消自动连抽(拼多多怎么取消免密支付)

    拼多多怎么取消自动连抽(拼多多怎么取消免密支付)

  • 淘宝店铺怎么加特别关注(淘宝店铺怎么加入黑名单,再不买他家东西)

    淘宝店铺怎么加特别关注(淘宝店铺怎么加入黑名单,再不买他家东西)

  • 怎样从快手主页加微信(怎么把快手添加到主页面)

    怎样从快手主页加微信(怎么把快手添加到主页面)

  • 魅族16s上市时间(魅族16s上架时间)

    魅族16s上市时间(魅族16s上架时间)

  • 魅族电话录音在哪里找(魅族电话录音在哪里找出来)

    魅族电话录音在哪里找(魅族电话录音在哪里找出来)

  • 华为设置输入法为默认输入法教程(华为设置输入法手写)

    华为设置输入法为默认输入法教程(华为设置输入法手写)

  • 前端知识——css之flex布局(css前端还是后端)

    前端知识——css之flex布局(css前端还是后端)

  • 三个数排序(三个数排序c语言程序从大到小)

    三个数排序(三个数排序c语言程序从大到小)

  • 合理避税与偷税漏税的行为区别
  • 初级职称需要进行继续教育吗
  • 行政单位调拨的固定资产申请报告
  • 购买工业用地税费
  • 2019年一季度季报怎样填写
  • 防伪税控开具发票明细表
  • 现金折扣不考虑增值税什么意思
  • 给个人支付劳务报酬怎么做账
  • 项目部管理人员及作业人员的
  • 小规模免了增值税怎么办
  • 企业哪些可以抵扣增值税
  • 进项发票和销项发票金额相同还需要交税金吗
  • 定额发票有效期是多长时间?你知道吗?
  • 展览费怎么开票
  • 增值税附表一免税项目金额填不上
  • 工商营业年报怎么做
  • 报关单和发票上的公司抬头不一致
  • 公司代缴的个税怎么查询
  • 装饰公司发票怎么
  • 资本弱化管理规定最新
  • 测试费怎么入账
  • 华硕p8h61主板升级更换什么主板合适
  • 存出投资款是什么凭证
  • 少数股东持股比例
  • 溢价发行股票的相关交易费用冲减资本公积
  • Win10 Build 21364 预览版正式更新(附更新内容)
  • 民间非营利组织会计账务处理
  • 电商第三方平台规则的特点
  • 商业企业低值易耗品科目核算的内容
  • 入库材料未付款属于什么会计科目
  • clipbrd.exe是什么意思
  • algarin.exe什么意思
  • 产生永久性差异时为什么计税基础等于账面价值
  • 带薪缺勤会计分录
  • win7系统文件在哪
  • vue项目eslint配置
  • 货币资金属于
  • yolov5训练参数说明
  • 流动资产处置利得
  • 缴纳社保公司需要税务登记吗
  • 公司给员工发放福利会计分录
  • 所得税季度申报表怎么填
  • 全套工商登记资料都有什么
  • sql数据库使用基本原理
  • win2008iis安装
  • 商家的这些行为对消费者的购买行为有什么影响
  • 软件开发服务费计入什么科目
  • 政府给的专款专用的补贴需要交税吗
  • 物资采购是
  • 税务局退以前年度的税款怎样记账
  • 100%直接控制的母子公司之间,母公司向子公司
  • 现金日记账1月怎么记账
  • 中央空调的维护费一年要多少钱?
  • b-树和b+树都能有效地支持随机检索
  • mysql获取当前行数
  • win8系统怎么关闭投影
  • 虚拟机怎么手动设置ip地址
  • macos卸载java
  • mac电脑系统安装
  • linux 获取网页
  • windows10计划任务文件在哪
  • Win10 Mobile 10586.11已经在慢速通道推送 着离正式版更近了
  • windows7一键还原在哪
  • win10自带邮箱无法使用126
  • cocos creator 碰撞检测
  • [置顶] 关于UNITY5.0和高通AR4.2.3在手机上白屏的问题
  • bat关闭bat
  • 很不错的成语
  • unity连接数据库能做什么
  • 本地安装策略在哪里
  • 从零基础开始学
  • Python中time模块中的方法
  • bootstrap按钮的风格有哪些?
  • jquery插件库怎么导入
  • 如何判断python列表长度
  • 甘肃税务局电子发票怎么开
  • 国家税务总局公告2017年第21号
  • 陕西省税务电话是多少
  • 提高增值税税率是什么意思
  • 国家税务总局河南税务局官网查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号