代码拉取完成,页面将自动刷新
const express = require('express');
const bodyParser = require('body-parser');
var jwt = require('jsonwebtoken');
const model = require('./model.js');
const colModel = require('./colModel');
var https = require('https');
var fs = require('fs');
var options = {
key:fs.readFileSync('私钥地址'),
cert:fs.readFileSync('你的ssl证书地址')
}
const usermodule = require('./user'); //user 用户表
const statusmodule = require('./userstatus');//status 用户状态表
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(function(req,res,next){
res.set({
'Access-Control-Allow-Origin':'*'
})
next();
})
var spider = require('./use.js')
spider ();
setInterval(function(){
spider ();
},1000*60*60*24)
app.post('/list', (req, res) => {
try {
let type = req.body.type;// 类别
let page = req.body.page?req.body.page:1;// 页数
model.find({ className: type }).limit(20).skip((page-1)*20).exec(function (err, infos) {
for(let i=0; i<=infos.length; i++){
if(infos[i]){
infos[i].content = undefined
}
}
res.json({
status: 'Success!',
msg: '查询成功',
data: infos
})
})
} catch (err) {
res.json({
status: 'Fail!',
msg: err,
data: []
})
}
})
app.post('/search',function(req,res){
try{
var key = req.body.key;
var page = req.body.page?req.body.page:1
model.find({title: new RegExp(key,'i')}).limit(20).skip((page-1)*20).exec(function(err,ns){
res.json({status:'success',msg:'查询成功',data:ns})
})
}catch(err){
res.json({status:'fail',msg:'查询失败',data:[]})
}
})
//注册接口 username-账号 password-密码 img-用户头像文件名称
//code错误状态码 msg返回的提示信息
app.post('/reg', function (req, res) {
let username = req.body.username
let password = req.body.password
let imgname = req.body.img
if (username == null || password == null || username == '' || password == '' || imgname==null ||imgname=='') {
res.json({ code: '0', msg: '参数错误' })
} else {
usermodule.find({ user: `${username}` }, function (err, ret) {
if (err) { //数据库报错提示
res.json({code: '5',msg: 'Internal Server Error'})
} else {//进行账号判断 是否已经注册
if (ret.length != 0) { //说明有数据查出来==>账号已经被注册
res.json({ code: '1', msg: '账号已注册' })
} else { //说明没有数据查出来==>账号没有被注册,进行注册
var mewsshuju = new usermodule({
user: username,
password: password,
img:imgname,
time: new Date().getTime()
})
//保存数据 是否有异常进行处理
mewsshuju.save(function (err) {
if (err) {
res.json({ code: '2', msg: '注册失败,未知错误' })
} else {
res.json({ code: '3', msg: '注册成功' })
}
})
}
}
})
}
})
//登录接口 username-账号 password-密码
app.post('/login', function (req, res) {
let username = req.body.username
let password = req.body.password
if (username == null || password == null || username == '' || password == '') {
res.json({ code: '0', msg: '参数错误' })
}else {
usermodule.find({ user: `${username}` }, function (err, ret) {
if (err) { //数据库报错提示
res.json({ code: '5', msg: 'Internal Server Error' })
} else {
if (ret.length == 0) { //没有查询出数据来 说明没有该账号
res.json({ code: '1', msg: '没有该账号' })
} else {//有查询出数据 说明该账号存在
//进行账号的密码是否正确判断
if (password != ret[0].password) {//密码不匹配
res.json({ code: '2', msg: '账号密码错误' })
} else {//密码匹配正确
//token值设置
let tokenstr = jwt.sign({
exp: Math.floor(Date.now() / 1000) + (60 * 60*24*30),
data: username
}, 'lq'); //secret 密钥
//登录更新 token值
statusmodule.find({ user: `${username}` }, function (err, ret) {
if (err) {
res.json({ code: '5', msg: '未知错误' })
} else {
if (ret.length > 0) { //用户登录状态
if(ret[0].token==null || ret[0].token==''){
//修改用户状态
statusmodule.update({"user":username}, {$set: {"token":`${tokenstr}`,"userstatus":1}},
function(error, result){
});
res.json({ code: '4', msg: '登录成功', token: tokenstr })
}else{
res.json({ code: '4', msg: '登录成功', token: ret[0].token })
}
} else { //用户第一次登录保存状态
var statusdb = new statusmodule({
user: username,
token: tokenstr,
userstatus: 1 // 0-未登录 1-登录
})
statusdb.save()
res.json({ code: '4', msg: '登录成功', token: tokenstr })
}
}
})
}
}
}
})
}
})
//收藏和取消收藏
//post请求 传入三个参数 一、token 登录时返回的token 二、newId 新闻ID 三、1代表查询该文章是否收藏、2代表给该文章收藏或取消收藏
//返回值 一、status 请求是否成功 二、msg 描述 三、data对象,属性isCollect代表该新闻是否收藏
app.post('/collected', function(req, res) {
let status = 'success';
let msg = '参数错误';
let isCollect = false;
let newId = req.body.newId;
let token = req.body.token;
let type = req.body.type;
//判断传来的参数是否存在
if (!newId || !token || type != 1 && type != 2) {
status = 'fail'
res.json({
status: status,
msg: msg,
data: {
isCollect: isCollect
}
});
return;
}
let username = jwt.decode(token).data;
//查询收藏表中是否有该用户
colModel.find({
username: username,
newId:newId
}, function(err1, result1) {
//收藏表中若无该用户,则存入该用户id和收藏的文章id
if (result1.length === 0) {
//type为1时查询文章是否收藏 、type为2时对文章收藏和取消收藏
if (type == 1) {
msg = '未收藏';
isCollect = false;
} else if (type == 2) {
let colInfo = new colModel({
username: username,
newId: newId,
isCollect: true
})
colInfo.save(function(err2) {
if (err2) {
console.log(err2)
res.json({
status: 'fail',
msg: '收藏失败',
data: {
isCollect: false
}
});
return;
}
})
msg = '收藏成功';
isCollect = true;
}
} else {
//收藏表中若有该用户,则查询是否有收藏该文章
//type为1时查询文章是否收藏、type为2时对文章收藏和取消收藏
if (type == 1) {
status = 'success';
msg = '已收藏';
isCollect = true;
} else if (type == 2) {
isCollect = false;
msg = '取消收藏';
colModel.remove({
username: username,
newId: newId
}, function(err3, result3) {
if (err1) {
console.log('更新失败')
res.json({
status: 'fail',
msg: '收藏失败',
data: {
isCollect: false
}
});
return;
}
})
}
}
res.json({
status: status,
msg: msg,
data: {
isCollect: isCollect
}
})
})
})
//个人收藏列表 参数 一、token 登录时返回的token
app.post('/collectList', function(req, res) {
let token = req.body.token;
let data = [];
let msg = '';
let status = '';
//判断传来的参数是否存在
if (!token) {
res.json({
status: 'fail',
msg: '参数错误',
data: []
});
return;
}
let username = jwt.decode(token).data;
colModel.find({username: username, isCollect: true},{newId:1})
.populate('newId').exec(function(err1, result1) {
status = 'success';
if (result1.length === 0) {
msg = '暂无收藏';
} else {
msg = '收藏列表';
data = result1
}
res.json({
status: status,
msg: msg,
data: data
})
})
})
//退出登录
app.post('/logout',(req,res)=>{
let token = req.body.token;
//判断传来的参数是否存在
if (!token) {
res.json({code:'1',msg:'参数错误'});
return;
}
let username = jwt.decode(token).data;
statusmodule.find({user:`${username}`},function(err,es){
// res.json({msg:'登出成功'})
var whereData = {"user":username}
var updateDat = {$set: {"token":"","userstatus":0}}; //如果不用$set,替换整条数据
statusmodule.update(whereData, updateDat, function(error, result){
if (error) {
res.json({code:'403',msg:'登出失败'});
}else{
res.json({code:'200',msg:'登出成功',data:result});
}
});
})
})
//查看登录状态 参数:token值
app.post('/login/status',(req,res)=>{
let token = req.body.token;
if (!token) {
res.json({code:'1',msg:'参数错误'});
return;
}
let username = jwt.decode(token).data;
jwt.verify(token, 'lq', (err, decoded) => {
if (err) {
switch (err.name) {
case 'JsonWebTokenError':
res.json({ code: -1, msg: '无效的token' });
break;
case 'TokenExpiredError':
res.json({ code: -1, msg: 'token过期' });
break;
}
let whereData = {"user":username}
let updateDat = {$set: {"token":"","userstatus":0}}; //如果不用$set,替换整条数据
usermodule.update(whereData, updateDat, function(error, result){
if (error) {
res.json({code: 500,msg: '修改失败',error: error});
}
});
}else{
usermodule.find({user:`${username}`},function(err,es){
res.json({
code: 200,
msg: '登录中',
data:{
username: es[0].user,
imgname: es[0].img
}
})
})
}
})
})
//新闻详情
app.post('/news', (req, res) => {
try {
let id = req.body.newId; // 类别
model.findById(id, function(err, nn) {
res.json({
status: 'Success!',
msg: '查询成功',
data: nn
})
})
} catch (err) {
res.json({
status: 'Fail!',
msg: err,
data: []
})
}
})
//端口监听
app.listen(2019);
https.createServer(options,app).listen(88);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。