遇到的坑已填,重构《Node.js 实战》的博客例子。
遇到的坑已填,重构《Node.js 实战》的博客例子。
概述
- 例子来自 《node.js 实战》这本书的第一章。
- 用 coffeeScript & express4 & bootstrap 重构。
- 在这编码过程以及部署过程中遇到很多坑,希望这个例子能够帮到同样遇坑的朋友。
功能
- 多人注册、登录
- 发布文章
(markdown语法)
- 发布评论
(markdown语法)
- 上传文件
- 用户文章页
- 文章的编辑删除
- 存档浏览
- 标签浏览
- 分页功能
- 文章pv
(浏览数)
- 文章搜索
- 系统日志记录
演示
技术: node.js+express4+mongodb
时间: 2014年6月
源码: blog-coffeeScript-express4-bootstrap3
我的博客: think2011
遇到的坑已填,重构《Node.js 实战》的博客例子
概述
本文介绍了如何使用 coffeeScript
、express4
和 bootstrap
重构《Node.js 实战》一书中第一章的例子。在这个过程中,遇到了一些坑,并且已经逐一解决。希望通过这个例子帮助遇到类似问题的朋友。
功能
重构后的博客系统具备以下功能:
- 多人注册、登录
- 发布文章 (Markdown 语法)
- 发布评论 (Markdown 语法)
- 上传文件
- 用户文章页
- 文章的编辑删除
- 存档浏览
- 标签浏览
- 分页功能
- 文章PV (浏览数)
- 文章搜索
- 系统日志记录
示例代码
这里提供一个简单的示例代码片段,展示如何使用 express4
创建一个基本的路由来处理用户登录:
// app.coffee
express = require('express')
bodyParser = require('body-parser')
app = express()
# 使用 bodyParser 解析请求体
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
# 登录路由
app.post '/login', (req, res) ->
username = req.body.username
password = req.body.password
# 这里假设有一个用户验证函数
isValidUser = validateUser(username, password)
if isValidUser
req.session.user = {username}
res.status(200).json({success: true, message: '登录成功'})
else
res.status(401).json({success: false, message: '用户名或密码错误'})
# 启动服务器
app.listen 3000, () ->
console.log 'Server is running on port 3000'
技术栈
- Node.js: 后端运行环境
- Express4: Web 框架
- MongoDB: 数据库
- CoffeeScript: 一种更简洁的 JavaScript 编程语言
- Bootstrap: 前端框架
时间
2014年6月
源码
我的博客
通过上述示例代码,可以看到如何使用 express4
创建一个简单的登录路由。实际项目中还需要更多的功能实现和优化,例如用户会话管理、数据库操作等。希望这个例子能帮助大家更好地理解和实现类似的项目。
node.js本身每个文件就是一个模块,使用coffeeScript生成的感觉反而不是很清爽
使用coffeescript的目的是因为觉得写起代码来非常爽,当然同时本来1个文件的,一下子变成3个文件了。
最近也在折腾个博客,这个看起来不错,文章链接最好,用_id什么的,要不太长了。
本站用的是_id吗? 似乎只有mongoose才能产生这样的ID是吗? 因为是书中的例子,并没有做优化改写。
是的啊。不是mongoose也可以啊,我在折腾中的 https://github.com/nosqldb/nblog ,目前界面比较丑,在想借鉴你的还是直接在你的基础上改。
就我觉得,这个源码只能借鉴,本身偏练习多一些,自己从零设计一个博客的话,得重新考虑架构。 界面如何设计关系不大,只要后端结构足够清晰,即使推翻设,重新计都没有关系。 重要的是后端的结构,我在重构这个源码的时候,发现当要更换模块,或者变动代码的时候,特别困难,因为没有考虑过复用性,这是一个针对练习的例子,或许你找找本站的源码参考。
概述
重构《Node.js 实战》的博客例子。这个例子使用了CoffeeScript、Express4和Bootstrap进行重构,并且涵盖了以下功能:
- 多人注册、登录
- 发布文章(Markdown语法)
- 发布评论(Markdown语法)
- 上传文件
- 用户文章页
- 文章的编辑删除
- 存档浏览
- 标签浏览
- 分页功能
- 文章PV(浏览数)
- 文章搜索
- 系统日志记录
示例代码
以下是几个核心功能的示例代码:
注册与登录
# routes/auth.coffee
auth = require '../controllers/auth'
module.exports = (app) ->
app.post '/signup', auth.signup
app.post '/login', auth.login
# controllers/auth.coffee
bcrypt = require 'bcrypt'
User = require '../models/user'
exports.signup = (req, res) ->
user = new User()
user.email = req.body.email
user.password = bcrypt.hashSync(req.body.password, 10)
user.save (err) ->
if err then res.status(500).send(err) else res.send('Signup Success')
exports.login = (req, res) ->
email = req.body.email
password = req.body.password
User.findOne {email: email}, (err, user) ->
if err or not user? or not bcrypt.compareSync(password, user.password)
res.status(401).send("Invalid Email/Password")
else
res.send('Login Success')
发布文章
# routes/article.coffee
articleCtrl = require '../controllers/article'
module.exports = (app) ->
app.post '/article', articleCtrl.createArticle
# controllers/article.coffee
Article = require '../models/article'
marked = require 'marked'
exports.createArticle = (req, res) ->
article = new Article()
article.title = req.body.title
article.content = marked(req.body.content)
article.save (err) ->
if err then res.status(500).send(err) else res.send('Article Created')
文章列表与分页
# routes/article.coffee
articleCtrl = require '../controllers/article'
module.exports = (app) ->
app.get '/articles', articleCtrl.getArticles
# controllers/article.coffee
Article = require '../models/article'
mongoosePaginate = require 'mongoose-paginate'
Article.plugin mongoosePaginate
exports.getArticles = (req, res) ->
options =
page: req.query.page or 1
limit: 10
Article.paginate {}, options, (err, result) ->
if err then res.status(500).send(err) else res.send(result)
技术栈
- Node.js: 后端运行时环境
- Express4: Web应用框架
- MongoDB: 数据库
- CoffeeScript: 代码更简洁
- Bootstrap3: 前端UI库
源码
你可以从这里获取完整的源码。
我的博客
更多技术分享可以在我的博客:Think2011 查看。