nodejs框架基于express模块的blog开发心得(nodejs学习)

项目整体整体布局

项目文件夹预览
项目整体可以分为:

  • 数据库连接
  • 路由配置
  • 业务逻辑编写
    *账号(登入、登出)
    *文章增加
    *文章删除
    *文章修改
    *文章查看
    *文章浏览量统计

数据库连接

新建database.js文件,主要代码:

const mysql = require('mysql');
const config = require('./config');

const database = mysql.createConnection({
   host:config.host,
   user:config.user,
   port:config.port,
   password:config.password,
   database:config.database
});

database.connect();
module.exports = database;

配置完之后直接在用的地方引这个配置文件就可以使用了。

路由配置

路由配置是非常重要和一个环节,种页面的请求和交互都要在路由配置的文件中实现:

var express = require('express');
var router = express.Router();
var crypto = require('crypto');
var mysql = require('./../database');

/* GET home page. */
router.get('/', function(req, res, next) {
  var query = 'SELECT * FROM article ORDER BY articleID DESC';
  mysql.query(query, function(err,rows,fields) {
    var articles = rows;
    articles.forEach(function(ele) {
      var year = ele.articleTime.getFullYear();
      var month = ele.articleTime.getMonth() + 1 > 10 ? ele.articleTime.getMonth() : '0' + (ele.articleTime.getMonth + 1);
      var date = ele.articleTime.getDate() > 10 ? ele.articleTime.getDate() : '0' + ele.articleTime.getDate();
      ele.articleTime = year + '-' + month +'-' + date;
    });
    res.render('index',{articles: articles});
  });
  //res.render('index', { title: 'Express' });
});

router.get('/friends', function(req, res, next) {
  res.render('friends');
});

router.get('/about', function(req, res, next) {
  res.render('about');
});

router.get('/logout', function(req, res, next) {
  req.session.user = null;
  res.redirect('/');
})

页面的请求都是通过路由文件进行分配数据传输以及渲染。

业务逻辑编写

nodejs框架的express模块可以使用个文件组件的方法进行渲染页面,所以可以运用组件的方法进行编写代码,大大的节省了工作量,还能使代码变得整洁,页面head组件例子如下:

<head>
    <meta charset="UTF-8">
    <title>node的个人博客</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta name="description" content="node的个人博客,分享node.js技术,不忘实心,共同成长">
    <meta name="keywords" content="Node,Node.js,Node的博客,Node.js技术">
    <link rel="stylesheet" href="/stylesheets/normalize.css">
    <link rel="stylesheet" href="/stylesheets/main.css">
</head>

这个头文件可以在其他页面直接使用:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<%- include("./public/head.ejs")%>
</head>
<body>
<%- include("./public/header.ejs")%>
<section class="main floatfix">
    <%- include("./public/aside.ejs")%>
    <section class="main-articles about">
        <h2>关于博客</h2>
        <p>....</p>
    </section>
</section>
<%- include("./public/footer.ejs")%>
</body>
</html>

登录都是采用form表单的提交的方式,获取前端页面所提交的用户名密码,然后和数据库中的用户名密码进行对比,作出相应的渲染处理。其中为防止密码泄露,可以通过加密的方式进行比对。

router.post('/login', function(req, res, next) {
  var name = req.body.name;
  var password = req.body.password;
  var hash = crypto.createHash('md5');
  hash.update(password);
  password=hash.digest('hex');
  var query = 'SELECT * FROM author WHERE authorName=' + mysql.escape(name) + 'AND authorPassword=' + mysql.escape(password);
  mysql.query(query,function(err, rows, fields) {
    if(err) {
      console.log(err);
      return;
    }

    var user = rows[0];
    if(!user) {
      res.render('login',{message:'用户名密码错误'});
      return;
    }
    req.session.user = user;
    // req.session.userSign = true;
    // req.session.userID = user.authorID;
    res.redirect('/');
  });
});

route主要处理细节:get请求要用render的方法进行前端页面传数据及渲染;post请求要用redirect方法进行处理或指定渲染页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Houzhijie131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值