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

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

Express论坛搭建指南

应用生成器

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

npm install -g express-generatorexpress node_express_forum

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

cd node_express_forumnpm 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.jsmodule.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/

你可能感兴趣的文章
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中使用range范围节点实现从一个范围对应至另一个范围
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
查看>>
Node-RED中建立TCP服务端和客户端
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
查看>>
Node-RED订阅MQTT主题并调试数据
查看>>
node-request模块
查看>>
Node.js 8 中的 util.promisify的详解
查看>>
node.js url模块
查看>>
Node.js Web 模块的各种用法和常见场景
查看>>