博客
关于我
从0到1学习node(七)之express搭建简易论坛
阅读量:464 次
发布时间:2019-03-06

本文共 3332 字,大约阅读时间需要 11 分钟。

Express论坛搭建指南

应用生成器

使用Express框架搭建论坛的首选工具是应用生成器。通过以下命令创建一个完整的开发框架:

npm install -g express-generator
express node_express_forum

生成后进入目录,安装必要依赖:

cd node_express_forum
npm install --save-dev

启动服务器并进入开发环境:

npm start

访问 127.0.0.1:3000 查看默认页面。

准备工作

完成框架搭建后,进行以下准备工作:

模板引擎

替换默认的Jade模板引擎,选择EJS:

npm install ejs --save-dev

app.js 中设置:

app.set('view engine', 'ejs');

数据库模型

创建用户、主题和回复三张表,定义模型文件:

// models/user.js
module.exports = {
hash: function(str) {
return crypto.createHmac('sha1', str).update('love').digest('hex');
},
reg: function(username, password, regtime, cb) {
pool.getConnection(function(err, connection) {
if (err) throw err;
connection.query('SELECT `id` FROM `user` WHERE `username` = ?', [username], function(err, result) {
if (err) throw err;
if (result.length) {
cb({ isExisted: true });
} else {
connection.query('INSERT INTO `user` SET ?', { username, password, regtime }, function(err, result) {
cb(result);
});
}
});
});
},
login: function(username, password, cb) {
pool.getConnection(function(err, connection) {
if (err) throw err;
connection.query('SELECT `id` FROM `user` WHERE `username` = ? AND `password` = ?', [username, password], cb);
});
}
};

注册与登录

数据库连接

安装MySQL模块并创建数据库连接池:

npm install mysql --save-dev

创建 db.js 文件:

var mysql = require('mysql');
var pool = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: '123',
database: 'forum'
});
module.exports = pool;

登录功能

routes/user.js 中定义登录路由:

router.post('/login', function(req, res, next) {
var username = req.body.username || '';
var password = req.body.password || '';
var password_hash = user_m.hash(password);
user_m.login(username, password_hash, function(result) {
if (result.length) {
req.session.user = { uid: result[0].id, username };
res.redirect('/');
} else {
res.render('login', { errmsg: '用户名或密码错误' });
}
});
});

首页及详情页

主题列表

创建 list.js 模型:

module.exports = {
getIndexList: function(cb) {
pool.getConnection(function(err, connection) {
connection.query('SELECT `list`.*, username FROM `list`, `user` WHERE `list`.`uid` = `user`.`id`', function(err, result) {
cb(result);
});
});
}
};

发表主题

routes/list.js 中添加路由:

router.get('/addtopic', function(req, res) {
if (req.session.user) {
var title = req.query.title, content = req.query.content;
list_m.addTopic({ uid: req.session.user.uid, title, content, createtime: Date.now() / 1000 }, function(result) {
if (result.affectedRows) {
res.json({ code: 0, msg: '添加成功', data: { url: '/list/' + result.insertId + '.html', title, author: req.session.user.username, createtime: result.insertId } });
} else {
res.json({ code: 2, msg: '添加失败,请重新尝试' });
}
});
} else {
res.json({ code: 1, msg: '您还未登录' });
}
});

详情页

routes/list.js 中定义路由:

router.get('/:pid.html', function(req, res) {
var pid = req.params.pid;
async.parallel([
function(cb) {
list_m.getListById(pid, cb);
},
function(cb) {
list_m.getReplyById(pid, cb);
}
], function(err, results) {
res.render('list', { data: results });
});
});

总结

通过以上步骤,我们成功搭建了一个基于Express的简易论坛系统,涵盖了注册、登录、发布主题和回复主题等核心功能。完整的代码和文档可在我的GitHub上获取:[链接]

转载地址:http://vqvbz.baihongyu.com/

你可能感兴趣的文章
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
nmap指纹识别要点以及又快又准之方法
查看>>