web server博客项目

  1. Node.js 从零开发 web server博客项目[项目介绍]
  2. Node.js 从零开发 web server博客项目[接口]
  3. Node.js 从零开发 web server博客项目[数据存储]
  4. Node.js 从零开发 web server博客项目[登录]
  5. Node.js 从零开发 web server博客项目[日志]
  6. Node.js 从零开发 web server博客项目[安全]
  7. Node.js 从零开发 web server博客项目[express重构博客项目]
  8. Node.js 从零开发 web server博客项目[koa2重构博客项目]
  9. Node.js 从零开发 web server博客项目[上线与配置]

目录结构

    |-- app.js
|-- package.json
|-- bin
| |-- www.js
|-- src
|-- controller
| |-- blog.js
| |-- user.js
|-- model
| |-- resModel.js
|-- router
|-- blog.js
|-- user.js

package.json

{
"name": "blog-1",
"version": "1.0.0",
"description": "",
"main": "bin/www.js",
"scripts": {
"dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js",
"prd": "cross-env NODE_ENV=production nodemon ./bin/www.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"cross-env": "^5.2.0",
"nodemon": "^1.19.1"
}
}

www.js

const http = require('http')
const port = 9527 const serverHandle = require('../app') const server = http.createServer(serverHandle)
server.listen(port, () => {
console.log(`server is running on ${port}`)
})

app.js

const querystring = require('querystring')

const handleBlogRouter = require('./src/router/blog')
const handleUserRouter = require('./src/router/user') // 处理 post data
const getPostData = (req) => {
const promise = new Promise((resolve, reject) => {
if (req.method !== 'POST') {
resolve({})
return
}
if (req.headers['content-type'] !== 'application/json') {
resolve({})
return
}
let postData = ''
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
if (!postData) {
resovle({})
return
}
resolve(
JSON.parse(postData)
)
})
})
return promise
} const serverHandle = (req, res) => {
// 设置返回文件格式 JSON
res.setHeader('Content-type', 'application/json') const url = req.url // 获取path
req.path = url.split('?')[0] // 解析 query
req.query = querystring.parse(url.split('?')[1]) getPostData(req).then(postData => {
req.body = postData // 处理 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() })
} module.exports = serverHandle // process.env.NODE_ENV

router/blog.js

const {
getList,
getDtail,
newBlog,
updateBlog,
delBlog
} = require('../controller/blog')
const {
SuccessModel,
ErrorModel
} = require('../model/resModel') const handleBlogRouter = (req, res) => {
const {
method,
path
} = req const id = req.query.id // 获取博客列表
if (method === 'GET' && path === '/api/blog/list') {
const {
author,
keyword
} = req.query || ''
const listData = getList(author, keyword)
return new SuccessModel(listData)
} // 获取一篇博客的内容
if (method === 'GET' && path === '/api/blog/detail') {
const data = getDtail(id)
return new SuccessModel(data)
} // 新增一篇博客
if (method === 'POST' && path === '/api/blog/new') {
const data = newBlog(req.body)
return new SuccessModel(data)
} // 更新一篇博客
if (method === 'POST' && path === '/api/blog/update') {
const result = updateBlog(id, req.body)
if (result) {
return new SuccessModel(data)
} else {
return ErrorModel('更新博客失败')
}
} // 删除一篇博客
if (method === 'POST' && path === '/api/blog/del') {
const result = delBlog(id)
if (result) {
return new SuccessModel(result)
} else {
return new ErrorModel('删除博客失败')
}
}
} module.exports = handleBlogRouter

router/user.js

const {
loginCheck
} = require('../controller/user')
const { SuccessModel, ErrorModel} = require('../model/resModel') const handleUserRouter = (req, res) => {
const {
method,
path
} = req // 登录
if (method === 'POST' && path === '/api/user/login') {
const {
username,
password
} = req.body
const result = loginCheck(username, password) if (result) {
return new SuccessModel(result)
} else {
return new ErrorModel('登录失败')
}
}
} module.exports = handleUserRouter

假数据

controller/blog.js

const getList = (author, keyword) => {
// 博客列表
return [{
id: 1,
title: '标题a',
content: '内容a',
createTime: 1562085127324,
suthor: 'zhangsan'
},
{
id: 2,
title: '标题b',
content: '内容b',
createTime: 1562085168425,
suthor: 'lisi'
},
]
} // 博客内容
const getDtail = (id) => {
return {
id: 1,
title: '标题a',
content: '内容a',
createTime: 1562085127324,
suthor: 'zhangsan'
}
} // 新增一篇博客
const newBlog = (blogData) => {
// 赋予id
return {
id: 3
}
} // 更新一篇博客
const updateBlog = (id, blogData = {}) => {
console.log(`更新一篇博客, ID:${id}, 内容:${blogData}`)
return true
} // 删除一篇博客
const delBlog = (id) => {
console.log(`删除一篇博客, ID:${id}`)
return true
} module.exports = {
getList,
getDtail,
newBlog,
updateBlog,
delBlog
}

controller/user.js

const loginCheck = (username, password) => {
if (username === 'zhangsan' && password === '1234') {
return true
}
} module.exports = {
loginCheck
}

Node.js 从零开发 web server博客项目[接口]的更多相关文章

  1. Node.js 从零开发 web server博客项目[express重构博客项目]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  2. Node.js 从零开发 web server博客项目[数据存储]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  3. Node.js 从零开发 web server博客项目[koa2重构博客项目]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  4. Node.js 从零开发 web server博客项目[安全]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  5. Node.js 从零开发 web server博客项目[日志]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  6. Node.js 从零开发 web server博客项目[登录]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  7. Node.js 从零开发 web server博客项目[项目介绍]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  8. Vue+node.js实现一个简洁的个人博客系统

    本项目是一个用vue和node以及mysql实现的一个简单的个人博客系统,整体逻辑比较简单.但是可以我们完整的了解一个项目从数据库到后端到前端的实现过程,适合不太懂这一块的朋友们拿来练手. 本项目所用 ...

  9. Node.js调用百度地图Web服务API的Geocoding接口进行点位反地理信息编码

    (从我的新浪博客上搬来的,做了一些修改.) 最近迷上了node.js以及JavaScript.现在接到一个活,要解析一个出租车点位数据的地理信息.于是就想到使用Node.js调用百度地图API进行解析 ...

随机推荐

  1. Linux C++实现一服务器与多客户端之间的通信

    通过网络查找资料得到的都是一些零碎不成体系的知识点,无法融会贯通.而且需要筛选有用的信息,这需要花费大量的时间.所以把写代码过程中用到的相关知识的博客链接附在用到的位置,方便回顾. 1.程序流程 服务 ...

  2. java+opencv人脸识别程序2.0

    由于第一次写的太粗糙了,所以又修改了一下,详细的更改如下: @ 目录 更改 窗口问题 识别问题 相似度对比 仍然存在的问题 人脸信息显示 图片质量 更改 优化了一下界面风格 窗口问题 原来是在主界面外 ...

  3. Scala集合中的函数(扩展)

    1.拉链(zip) 将两个集合进行 对偶元组合并,可以使用拉链 object Demo_031 { def main(args: Array[String]): Unit = { val list1 ...

  4. char **指针动态分配地址空间

    1. 定义char **类型变量,初始化为NULL 2. 分配行指针数组空间 3. 为每行分配空间 4. 释放每行的空间 5. 释放二维指针 void main() { char **pointer= ...

  5. 仿京东BOE官网 css代码

    * { margin: 0; padding: 0; border: 0; list-style: none; } .box { width: 1518px; height: 1300px; marg ...

  6. Federated Optimization: Distributed Machine Learning for On-Device Intelligence

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1610.02527v1 [cs.LG] 8 Oct 2016 坐标下降法:https://blog.csdn.net/qq_ ...

  7. Redis主从复制(读写分离)

    主从复制(读写分离):读在从库读,写在主库写. 主从复制的好处:避免redis单点故障构建读写分离架构,满足读多写少的需求. 主从架构: 操作(启动实例,在一台机器上启动不同的实例,进行伪主从复制): ...

  8. Java中动态规则的实现方式

    背景 业务系统在应用过程中,有时候要处理“经常变化”的部分,这部分需求可能是“业务规则”,也可能是“不同的数据处理逻辑”,这部分动态规则的问题,往往需要可配置,并对性能和实时性有一定要求. Java不 ...

  9. MySQL主从同步简单介绍&配置

    介绍: 现在mysql集群基本上都是使用一主多从方式,实现读写分离(主库写.从库读).负载均衡.数据备份,以前只是使用从未配置过,今天简单配置一下! mysql主从复制是通过binary log日志实 ...

  10. Git使用感悟

    前言 分支介绍 我们现在开发的分支一般是这样的(基于上面那张图片的): master:上线用的 dev:开发用的 featature_xxx:开发用的 test:测试用的 hotfix:修复bug的 ...