Node.js项目 博客系统

一、项目功能说明

  1. 登录、注册
  2. 新建博客
  3. 首页显示全部博客
  4. 查看博客详情页
  5. 查看博客评论区
  6. 修改、删除博客

二、最终效果

首页:
请添加图片描述
登录、注册:
请添加图片描述
在这里插入图片描述
详情页:
请添加图片描述

评论区:
请添加图片描述
新建博客:
请添加图片描述
登陆后的Banner:
请添加图片描述
用户设置->基本信息:
请添加图片描述
用户设置->账户设置:
请添加图片描述

三、文件目录结构说明

在这里插入图片描述

  • modules:包含需要建多个的Schema
  • public:包含公共的Css、Js、Image
  • views:按照不同功能、板块创建文件夹,并在对应文件夹下创建html文件
  • app.js:配置解析表单POST请求体数据、存取数据状态、使用模板引擎、挂载路由
  • router.js:路由配置

四、项目技术栈

  • express 框架
  • bootstrap 作为UI框架
  • mongodb 数据库
  • art-template 模板引擎
  • jquery + ajax 发送网络请求
  • 使用 express-session 存取数据状态,通过req.session来访问和设置session成员
  • mongoose 使用了一种直接的、基于scheme结构的方式定义数据模型

五、核心技术

1. 使用Schema定义数据模型

例如:定义评论的 Schema模型

var commentSchema = new Schema({
    articleId:{
        type:String,
        required:true
    },
    nickname:{
        type:String,
        required:true
    },
    comments:{
        type:String,
        required:true
    },
    created_time:{
        type:Date,
        default:Date.now      
    }
})

2. mongoose 的操作

连接mongodb数据库:mongoose.connect('mongodb://localhost/user',{ useNewUrlParser: true ,useUnifiedTopology: true})
导出 Schema模型:module.exports = mongoose.model('Comment',commentSchema)

3.mogodb数据库的操作

查找:Topic.find(function(err,topics){ ... })
查找一个:User.findOne({ },function(err,data){})
保存信息:Topic(req.body).save(function(err,data){})
查找一个并更新:User.findOneAndUpdate({查找条件},{要修改的信息},function(err,data){})
删除:User.remove({查找条件},function(err,data){})

3. 使用第三方插件 express-session:存取数据状态

session 的配置

// 使用第三方插件 express-session:存取数据状态
// 1.npm install express-session
// 2.配置,一定要在路由之前
// 3.使用
//  当把这个插件配置好之后,我们就可以通过req.session来访问和设置session成员了
//  添加session数据:req.session.foo = 'bar
//  访问session数据:req.session.foo
var session = require('express-session')
app.use(session({
    // 配置加密字符串,他会在原有加密基础上和这个字符串拼起来去加密
    // 目的是为了增加安全性,防止客户端恶意伪造
    secret: 'itcast',   
    resave: false,
    saveUninitialized: false
}))

通过session 读取状态:

// 用户存在,登录成功,记录登录状态
        req.session.user = user
        res.status(200).json({
            err_code:0,
            message:'OK'
        })

清除 session:

	// 清楚登录状态
    // 重定向到登录页,<a>链接是同步请求,所以可以服务端重定向
    req.session.user = null
    res.redirect('/')

4. 挂载路由

创建路由:var router = express.Router(),并在路由上通过router.get()、router.post()方法添加请求,最后导出 router

5.使用md5对密码进行加密

通过md5对密码加密,这样数据库也无法读取到正确的密码

六、遇到的问题

  1. 没有很好的对时间进行格式化
  2. 未实现搜索文章功能

七、github链接

Node.js 博客项目

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基础的管理系统Node.js 源代码,包括数据库设计和服务器端逻辑。 1. 数据库设计 首先,你需要使用 MySQL Workbench 等工具创建一个名为 blog 的数据库,并在其中创建三个表格:blogs、users 和 comments。 blogs 表格包含以下字段: - id: ID - title: 标题 - content: 正文 - created_time: 创建时间 - author: 作者 ID users 表格包含以下字段: - id: 用户 ID - username: 用户名 - password: 密码 - nickname: 昵称 comments 表格包含以下字段: - id: 评论 ID - content: 评论内容 - created_time: 评论创建时间 - blog_id: 所评论的 ID - user_id: 评论者 ID 2. 服务器端逻辑 在服务器端,你需要使用 Express 和 MySQL 模块来实现路由、请求响应处理和用户认证等逻辑。 以下是一个基础的服务器端代码: ```javascript const express = require('express'); const mysql = require('mysql'); const bodyParser = require('body-parser'); const session = require('express-session'); const app = express(); // 配置 MySQL 数据库连接 const db = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'blog' }); // 连接 MySQL 数据库 db.connect((err) => { if (err) { throw err; } console.log('MySQL Connected'); }); // 配置 bodyParser 和 session app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(session({ secret: 'secret', resave: true, saveUninitialized: true })); // 登录路由 app.post('/login', (req, res) => { const username = req.body.username; const password = req.body.password; if (username && password) { db.query('SELECT * FROM users WHERE username = ? AND password = ?', [username, password], (err, results) => { if (results.length > 0) { req.session.loggedin = true; req.session.username = username; res.redirect('/'); } else { res.send('Incorrect username and/or password!'); } res.end(); }); } else { res.send('Please enter username and password!'); res.end(); } }); // 注册路由 app.post('/register', (req, res) => { const username = req.body.username; const password = req.body.password; const nickname = req.body.nickname; if (username && password && nickname) { db.query('INSERT INTO users (username, password, nickname) VALUES (?, ?, ?)', [username, password, nickname], (err, results) => { if (err) { throw err; } res.redirect('/'); res.end(); }); } else { res.send('Please enter username, password and nickname!'); res.end(); } }); // 列表路由 app.get('/', (req, res) => { if (req.session.loggedin) { db.query('SELECT * FROM blogs', (err, results) => { if (err) { throw err; } res.send(results); res.end(); }); } else { res.send('Please login to view this page!'); res.end(); } }); // 详情路由 app.get('/blog/:id', (req, res) => { const id = req.params.id; db.query('SELECT * FROM blogs WHERE id = ?', [id], (err, results) => { if (err) { throw err; } res.send(results[0]); res.end(); }); }); // 创建路由 app.post('/blog', (req, res) => { const title = req.body.title; const content = req.body.content; const author = req.session.username; if (title && content && author) { db.query('INSERT INTO blogs (title, content, author) VALUES (?, ?, ?)', [title, content, author], (err, results) => { if (err) { throw err; } res.redirect('/'); res.end(); }); } else { res.send('Please enter title and content!'); res.end(); } }); // 创建评论路由 app.post('/comment', (req, res) => { const content = req.body.content; const blog_id = req.body.blog_id; const user_id = req.session.username; if (content && blog_id && user_id) { db.query('INSERT INTO comments (content, blog_id, user_id) VALUES (?, ?, ?)', [content, blog_id, user_id], (err, results) => { if (err) { throw err; } res.redirect(`/blog/${blog_id}`); res.end(); }); } else { res.send('Please enter content!'); res.end(); } }); // 启动服务器 app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 以上代码实现了登录、注册、列表、详情、创建和创建评论等功能。在实际项目中,你还需要添加修改、删除等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值