express 实现我猜你喜欢功能
工具:利用cookie-parser中间件;
原理: 每次访问某一具体的文章,就表明可能客户端对这类文章感兴趣, 将这类文章的标签添加到cookie里,字段是like;
然后退回到含有 我猜你喜欢模块 的时候,就去发送aios请求, 请求的参数是cookies.like,然后就能返回数据,渲染到客户端就可以
cookie可以不加密,也可以加密,当然 这种不涉及隐私的我觉得没必要加密.
前端代码
getCookie() {
const cookieArr = document.cookie.split(';');
const cookieObj = {}
cookieArr && cookieArr.forEach(ele => {
cookieObj[ele.split('=')[0]] = ele.split('=')[1]
})
return cookieObj;
},
getGuessLike() {
//如果getCookie().like有值,说明可以去请求数据
if(this.getCookie().like){
axios({
url: '/getGuessLike',
}).then((result)=>{
console.log(result)
this.guessLike = result.data.data;
})
}else{//cookie不存在,赋值hotPassage
this.guessLike = this.hotPassage;
}
},
后端代码:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser('fasd'))//里面的字符串可以随机生成
app.use('/getGuessLike',getGuessLike);
app.use('/getPassageDetail',getPassageDetail);
function getPassageDetail(req, resp) {
const { id } = req.query;
passage.getPassageDetail(id, function (result) {
if (result.mes == "ok") {
resp.cookie('like', result.data.tags, { signed: true }) //请求完数据,添加cookie like(加密),这一步可以进一步优化,
//比如可以根据客户端查看的文章,动态获取查看文章最多的类型,然后再根据类型去查,等等
resp.status(200).send(JSON.stringify({ mes: "ok", data: result }))
} else {
result.mes = 'fail'
resp.status(200).send(JSON.stringify({ mes: "fail", data: result }))
}
})
}
function getGuessLike(req, resp) {
const like = req.signedCookies.like; //获取签名的cookie
passage.getGuessLike(like, function (result) {
console.log(result)
if (result.mes == "ok") {
resp.json({ mes: "ok",data: result.data})
}
});
}
DAO部分:
function getGuessLike(likeTag, cb) {
const connection = dbUtil.createConnection();
let queryArr = [];
likeTag.split(' ').forEach((ele) => {
queryArr.push(ele)
});
let querySql = "SELECT p.title, p.id FROM passage p JOIN passage_tag_mapping m ON p.id = m.passage_id JOIN tags t ON t.id = m.tag_id WHERE t.tag = ? ORDER BY views LIMIT 5";
if (queryArr.length > 1) {//这是一个根据cookie like设置的sql查询语句,动态添加查询条件
const reg = /\?/;
for (let i = 0; i < queryArr.length; i++) {
querySql.replace(reg, "? or where tag = ?")
}
}
connection.connect();
connection.query(querySql, queryArr, function (err, result) {
if (!err) {
cb({ mes: "ok", data: result })
} else {
console.log(err)
cb({ mes: "fail", data: err })
}
})
}
express 实现我猜你喜欢功能的更多相关文章
- Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)
目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能---- ...
- node+express实现文件上传功能
在进行node web开发时,我们可能经常遇到上传文件的问题,这一块如果我们没有经验,可能会遇到很多坑,下面我将跟大家分享一下,实现文件上传的一些方式. 一.node+express文件上传的常用方式 ...
- Nodejs学习笔记(八)—Node.js + Express 实现上传文件功能(felixge/node-formidable)
前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能----文件上传,示例以一个上传图片的功能为例子 上传功能命名用formidable实现,示例很简单! PS:最近比较忙,距上一次 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第八课 增加喜欢功能(课堂笔记)
tornado 相关说明 新增一个页面,用来做图片收藏, 还要在 account.py 创建一个数据库表,记录用户喜欢的图片,哪些图片用户疯狂传奇 cd 到 项目目录下,执行数据库更新 alembic ...
- nodejs之express框架商品管理系统登录功能
1.该系统主要使用express.body-parser.express-session.ejs.mongodb-connect . npm install express --save npm in ...
- 在SQL Server Express版本中没有代理功能如何自动备份数据库
因为是免费的且单个数据库可以支持到10GB,对于一般企业完全足够了,也就将就使用了,备份将分为两步: 1.创建备份脚本 2.创建系统的计划任务进行每天的备份 详细做法如下: 1.创建备份脚本 打开SS ...
- 真刀实战地搭建React+Webpack+Express搭建一个简易聊天室
一.前面bb两句 因为自惭(自残)webpack配置还不够熟悉,想折腾着做一个小实例熟悉.想着七夕快到了,做一个聊天室自己和自己聊天吧哈哈.好了,可以停止bb了,说一下干货. 二. 这个项目能学到啥? ...
- NodeJS旅程 : express - nodejs MVC 中的王牌
express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...
- express-6 请求和响应对象(1)
URL的组成部分 协议: 协议确定如何传输请求.我们主要是处理http和https.其他常见的协议还有file和ftp. 主机名: 主机名标识服务器.运行在本地计算机(localhost)和本地网络的 ...
随机推荐
- python内存相关以及深浅拷贝讲解
3.9 内存相关 3.9.1 id,查看内存地址 >>> v1 = [11,22,33] >>> v2 = [11,22,33] >>> prin ...
- 【LuoguP5280】[ZJOI2019] 线段树
题目链接 题目描述 略 Sol 显然不能直接暴力模拟. 观察这个东西本质在干什么,就是某一次操作可能进行可能不进行,然后求所有情况下被标记节点总数. 这个显然可以转化为概率问题,每次有二分之一的概率进 ...
- [转] 数值优化(Numerical Optimization)学习系列-目录
from:https://blog.csdn.net/fangqingan_java/article/details/48951191 概述数值优化对于最优化问题提供了一种迭代算法思路,通过迭代逐渐接 ...
- Sublime Text 3 程序运行后中文显示乱码的解决方案
问题描述: 问题分析: 新建python文件,输入下面代码,测试发现发送给python解释器时,默认为cp936的编码方式,而py文件为UTF-8的编码方式,cp936和UTF-8的编码方式对于英文字 ...
- 使用ros_driver运行velodyne16线激光雷达
一.使用ros_driver运行VLP16 推荐网址: http://blog.csdn.net/littlethunder/article/details/51920681 https://www. ...
- scrapy项目1:爬取某培训机构老师信息(spider类)
1.scrapy爬虫的流程,可简单该括为以下4步: 1).新建项目---->scrapy startproject 项目名称(例如:myspider) >>scrapy.cfg为项目 ...
- 论文阅读:Elastic Scaling of Stateful Network Functions
摘要: 弹性伸缩是NFV的核心承诺,但在实际应用中却很难实现.出现这种困难的原因是大多数网络函数(NFS)是有状态的,并且这种状态需要在NF实例之间共享.在满足NFS上的吞吐量和延迟要求的同时实现状态 ...
- No 'Configuration' method was found in class 'WebApp.Startup
The following errors occurred while attempting to load the app.- No 'Configuration' method was found ...
- Hive分析窗口函数(一) SUM,AVG,MIN,MAX
Hive分析窗口函数(一) SUM,AVG,MIN,MAX Hive分析窗口函数(一) SUM,AVG,MIN,MAX Hive中提供了越来越多的分析函数,用于完成负责的统计分析.抽时间将所有的分析窗 ...
- php GD库简单使用和封装
GD库创建图像步骤 <?php //1.创建画布 $width = 300; $height= 200; $image=imagecreatetruecolor($width,$height); ...