首页 > 其他 > 详细

继续记录学习生活~

时间:2020-07-07 10:51:54      阅读:49      评论:0      收藏:0      [点我收藏+]

分页:

1.在mongoose里面(原生也有),又两个api一般用来做分页;

  • query.skip:

  • query.limit:

  • model.countDocuments

dao.findstudents = async ({ page, limit }) => {
  const count = await studentsModel.countDocuments();
  const rows = await studentsModel.find().skip((page - 1)*limit).limit(limit);
  return {
      count,
      data:rows
  }
}

2.静态页面:自己梳理页面逻辑,下面是主要思想(代码自行考虑)

  1. 创建一个pager对象,用来管理页面状态

  2. ajax发送的数据应该来自pager,ajax接收的数据应该整合到pager

RESTful接口规范:

1.我们用到的接口如下:

Get: /students/getStudents =>get : /students/

Post: /students/addStudents =>post: /students/:name

Post: /students/updateStudents =>put:/students/:id

Post: /students/deleteStudent =>put:/students/:id

2.代码部分通过上面,修改两个地方:

路由

router.delete(‘/:id‘,async function(req, res, next) {
const {id} = req.params;
const data = await service.deleteOne({id})
res.send(data);
});

静态页面

 if ($(this).val() === "删除") {
                      $.ajax({
                          url: "students/"+id,
                          type: "delete",
                         
                          success({ isDel }) {
?
                              if (isDel) {
?
                                  render();
                              }
                              // console.log(data);
                          }
                      });
                  }
?

跨域

  1. 跨域的解决方案:jsonp,cors,代理服务器

  2. 代理服务器解决方案如下:

    中间件自动代理

   npm i http-proxy-middleware --save  // 安装依赖
 // server   ====>     ./app.js
  const { createProxyMiddleware } = require(‘http-proxy-middleware‘);
  const options = {
    target: ‘[http://localhost:3000](http://localhost:3000/)‘, // 目标主机
    changeOrigin: true, // needed for virtual hosted sites
    pathRewrite: {
      ‘^/api‘: ‘/‘, // 重写路径
    },
  };
  const exampleProxy = createProxyMiddleware(options);
  app.use(‘/api‘, exampleProxy);
 
  // client   =====>   [all].html
   
  // 1. 如果某一个http请求需要被转发,请在原来的相对地址前面加一个"/api"

第三方手动代理,自主转发

 npm i --save request request-promise
  const rp = require("request-promise");
  router.post(‘/login‘, async function (req, res, next) {
    const data = await rp({
      method: ‘POST‘,
      uri: targetUrl + ‘/users/login‘,
      body: req.body,
      json: true
    })
    res.send(data);
  });

状态保持:

1.session

2.jsonwebtoken (jwt)

实现步骤如下:

npm i jsonwebtoken express-jwt --save

a.登录成功生成并下发token(代理服务器)

//./routes/users.js

const jwt = require("jsonwebtoken")
const secretKey = "服务器需要保存的密钥"
if([成功]){
//生成token
const token = jwt.sign(
{username:"zs"},//payload
 secretKey,//服务器密钥
{
 expiresIn:60*60*2//过期时间
}
)
//下发token
res.send.({token,isLogin:true});
}else{
res.send({isLogin:false});
}

b.客户端接收到token并保存

//你的登录页面。xxx.html
function login(){
$ajax({
url:"xxx/login",
data:{username:"zs",password:"123"},
type:"post",
success({isLogin,token}){
if(isLogin){//success
localStorage.setItem("user_token",token);//保存token
//xxx
//xxx   做其他成功事情
//xxx
}else{//failed
//xxx
//xxx   做其他失败事情
//xxx
}
}
})
}
?

c.其他任何时期,需要携带token的ajax请求的实现。

// 你需要登录状态保持的页面(也就是需要权限的页面)xxx.html     jquery:
$.ajaxSettings.beforeSend = function (xhr, request) {
const user_token = window.localStorage.getItem(‘user_token‘);
xhr.setRequestHeader(‘Authorization‘, `Bearer ${user_token}`);
}

d.对于请求进行校验:

//./app.js     校验中间件注册的位置一定要满足能够拦截需要权限的那些路径
const jwt = require("express-jwt");
const static = require("./uril/salt");
?
app.use(express.static(path.join(__dirname, ‘public‘)));
app.use(jwt({secret:secretKey,credentialsRequired: true}).unless({path:["/users/login","/users/reg"]}));//jwt中间件的注册
app.use(‘/api‘, exampleProxy(自动代理中间件));

3.密码加密:

const crypto = require(‘crypto‘);
const data = {
MD5_SUFFIX: ‘zxy_salt‘,
md5: (pwd) => {
let md5 = crypto.createHash(‘md5‘);
return md5.update(pwd+data.MD5_SUFFIX).digest(‘hex‘);
},
secretKey: ‘zxy_key‘
};
module.exports =data
?
//某个需要加密的模块   xxx.js
const {md5} = require("../util/salt")
?
const data = "需要加密的数据";
const newData = md5(data);//加密后的数据

继续记录学习生活~

原文:https://www.cnblogs.com/love599/p/13258919.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!