文章功能

来源:互联网 发布:网络视频版权 编辑:程序博客网 时间:2024/05/22 07:54

文章发布+前台显示+网址处理

数据库建立文章表

CREATE TABLE `node`.`article`( `id`     INT(11)  NOT NULL AUTO_INCREMENT, `title` varchar(64)     NOT NULL ,  `tag` varchar(64) NOT NULL ,  `author` varchar(64) NOT NULL ,  `content` longtext NOT NULL ,  `time` varchar(64) NOT NULL ,  PRIMARY KEY (`id`)  )ENGINE = InnoDB CHARSET = utf8;

文章发布

访问/admin/article

admin.js

const express = require("express"),    router = express.Router(),    sql = require('../module/mysql.js');router.get("/",(req,res)=>{// 检测是否是管理员    if(req.session.admin){        res.render('admin/admin.ejs');    }else{        res.send("请登陆管理员账号");    }});router.get('/user',(req,res)=>{    // 访问admin/user    sql('SELECT * FROM `user`',(err,data)=>{        if(err){            res.send('数据查询错误');            return;        };        // console.log(data);//[{},{}]        res.locals.data = data;        res.render('admin/user');    });})router.post('/user',(req,res)=>{    let id = req.body.id;    // console.log(id);    // 删除.    sql('DELETE FROM `user` WHERE `id` = ?', [id] ,(err,data)=>{        if(err){            res.send('数据删除错误');            return;        };        res.json({            result:'删除成功'        })    });})// 修改router.get('/user/update',(req,res)=>{    // console.log(req.query);  //传值    sql('SELECT * FROM `user` WHERE `id` = ? ',[req.query.id],(err,data)=>{        if(err){            res.send('数据查询错误');            return;        };        res.locals.data = data;        res.render('admin/update');    });});// 'UPDATE `book`.`user` SET `name` = ?, `admin` = ? WHERE `user`.`id` = ?;'router.post('/user/update',(req,res)=>{    // console.log(req.body);    const id = req.body.id,        name = req.body.name || "",  //空白处理 //字符串        admin = req.body.admin || "0";        // console.log(name,admin,id);    sql('update `user` set `name`= ? ,`admin` = ? where `id`= ?;',[name,admin,id],(err,data)=>{        if(err){            res.send('数据查询错误');            return;        };        res.send("修改成功<a href='/admin/user'>返回用户管理</a>");    })})router.get('/article',(req,res)=>{    res.render('admin/article');});router.post('/article',(req,res)=>{    let title = req.body.title,        tag = req.body.tag,        author = req.body.author,        content = req.body.content,        time = new Date().toLocaleString(); //substring(0,10)  2017-5-28    // console.log(title,tag,author,content,time);    sql('INSERT INTO article (`id`, `title`, `tag` ,`author`,`content`,`time`) VALUES (0,?,?,?,?,?)',[title,tag,author,content,time],(err,data)=>{        if (err) {            res.send('数据查询错误');            return;        };        res.json({            result : "上传成功"        });    });});module.exports = router;

admin/article.ejs

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>article</title>    <script src="/js/jquery.js"></script></head><body>    文章标题: <input type="text" name="title" class="title">    文章标签: <input type="text" name="tag" class="tag">    作者: <input type="text" name="author" class="author">    内容: <input type="text" name="content" class="content">    <button class="button">发表</button>    <script>    $('.button').click(function(){        $.ajax({            url:'/admin/article',            type:'post',            dataType:'json',            data:{                title:$('.title').val(),                tag:$('.tag').val(),                author:$('.author').val(),                content:$('.content').val()            },            success(data){                console.log(data);            },            err(data){                alert("发表失败");            }        })    })    </script></body></html>

最新文章展示

数据截取查询 倒序
// LIMIT 截取 [a,b) 的数据SELECT * FROM `shuoshuo` LIMIT 0,3// 根据id进行倒序,  从0开始 截取3个数据SELECT * FROM `shuoshuo` order by id desc LIMIT 0,3
首页文章截取最新6条

index.js

const express = require('express'),    router = express.Router(),    sql = require("../module/mysql");// sql('INSERT INTO `phone` (`id`,`number`, `name`, `phone`) VALUES (0,?,?,?)')router.get('/',(req,res)=>{    // 访问首页.    // console.log(typeof req.session.admin); //string    res.locals.admin = req.session.admin;    //    LIMIT 查询几条到第几条数据    //  order by id desc 根据id从 新 => 旧进行排序    sql('SELECT * FROM `article` order by id desc LIMIT 0,6',(err,data)=>{        if(err){            res.send("数据错误");            return;        }        res.render('index.ejs',{data:data});    })});//访问articlerouter.get('/article',(req,res)=>{    sql('select * from article',(err,data)=>{        if(err){            res.send('错误');            return;        }        res.render('article',{data:data});    });});router.get('/article/:id.html',(req,res)=>{    // 访问/article/1.html    // 新的传值方法 :param    //req.params  同时接收get , post , 其它 提交数据的形式    console.log(req.params);    sql('select * from article where id = ?',[req.params.id],(err,data)=>{        if(data.length == 0){            // res.status(404)设置状态码            res.render('err.ejs');            return;        }        res.render('article',{data:data});    });});// 退出router.get('/logout',(req,res)=>{    // 清除cookie    res.clearCookie('login');    // 跳转到首页 redirect网址重定向    res.redirect('/');})// 管理用户admin.jsrouter.use('/admin',require('./admin'));// 注册交给login.jsrouter.use('/reg',require('./reg'));// 登陆router.use('/login',require('./login'));module.exports = router;

这里写图片描述


新的传值方式

// 访问/article/1.html// 新的传值方法 :param//req.params  同时接收get , post , 其它 提交数据的形式

/article

文章列表 ,详情页

article.ejs

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style type="text/css">        * {margin: 0; padding: 0;}        a {text-decoration: none;}        ul,li {list-style: none;}        body {font-family: "Microsoft yahei";}        ul {padding: 20px;}        li {width: 100%; height: 40px; line-height: 40px; background: #fafafa; border: 1px solid #ddd; cursor: pointer; border-radius: 5px;}        li a{display: block; width: 100%; height: 100%; color: #222; font-size: 16px; text-indent: 1em;}        li:hover{background: #EDEDED;}        li span {font-size: 14px; color: #454545;}        li span.time {float: right; margin-right: 20px;}    </style></head><body><% if(data.length == 1){ %>    <h1>文章标题: <%= data[0]['title'] %></h1>    <p>标签:<%= data[0]['tag'] %></p>    <p>标签:<%= data[0]['author'] %></p>    <p>标签:<%= data[0]['content'] %></p>    <p>标签:<%= data[0]['time'] %></p>    <a href='/article'>返回列表</a><% }else{ %>    <h1>文章列表:</h1>    <ul>    <% for(var i in data){ %>        <li><a href='/article/<%- data[i]["id"] %>.html'> <%- data[i]['title'] %> <span class='tag'> <%- data[i]['tag'] %> </span><span class='time'> <%- data[i]['time'] %> </span></a></li>    <% } %>    </ul><% } %></body></html>

这里写图片描述

这里写图片描述


访问没有的网址 ==> 处理 设置status

给响应的模板 设置404状态码

router.get('/article/:id.html',(req,res)=>{    // 访问/article/1.html    // 新的传值方法 :param    //req.params  同时接收get , post , 其它 提交数据的形式    console.log(req.params);    sql('select * from article where id = ?',[req.params.id],(err,data)=>{        if(data.length == 0){            // 需要res.status(404)设置状态码            res.status(404).render('err');            return;        }        res.render('article',{data:data});    });});

这里写图片描述