当前位置: 主页 > 日常积累 > node >

记录koa2遇到问题总结

前言:内容很多,一步一个脚印

1.Koa2设置全局变量

Koa中设置全局变量可以通过 ctx.state.变量名

例如

//获取url的地址,全局配置host;
router.use(async(ctx,next)=>{
console.log(ctx.state);
ctx.state.__HOST__='http://'+ctx.host;
await next(); //务必要让他向下执行
})

在模块中调用

ctx.state.__HOST__;

在模板里可以直接调用__HOST__;

{{__HOST__}}


2.koa-router管理模块三层嵌套

/*--app.js--*/
const router = require('koa-router')(); //注意:引入的方式
//引入模块
const admin = require('./router/admin');
//插入模块
router.use('/admin',admin);

/*--/router/admin.js--*/
const router = require('koa-router')();
router.get('/',async(ctx)=>{
ctx.body = '后台管理';
})
//引入模块
const login = require('./admin/login');
module.exports = router.routes();

/*--/router/admin/login.js--*/
const router = require('koa-router')();
router.get('/',async(ctx)=>{
await ctx.render('admin/login') //调用模板引擎
})
module.exports = router.routes();


3.koa实现验证码接口

/* 验证码*/
const svgCaptcha = require('svg-captcha');
router.get('/code', async (ctx) => {
captcha = svgCaptcha.create(
{
size: 6,
fontSize: 50,
width: 100,
height: 40,
background: "#cc9966"
}
);
ctx.session.code = captcha.text;
ctx.response.type = 'image/svg+xml'
ctx.body = captcha.data;
})
//用post请求将code传入node中,然后进行判断,并过滤大小写
if(code.toLocaleLowerCase() == ctx.session.code.toLocaleLowerCase()){
//业务代码
}

4.使用url模块过滤参数

const url = require("url");
//过滤url参数
const urls = url.parse(ctx.url).pathname;

5.日期转换插件

const sd = require('silly-datetime');
sd.format(new Date(), 'YYYY-MM-DD HH:mm')
/*app.js*/
//使用模板art-template过滤器的封装
//views模板引擎
render(app, {
root: path.join(__dirname, 'views'),
extname: '.htm',
debug: process.env.NODE_ENV !== 'production',
dateFormat:dateFormat =function(value){
if(value){
return sd.format(new Date(value), 'YYYY-MM-DD HH:mm');
}else{
return "目前尚未登陆"
}
}
});
/*模板里使用*/
   {{each list}}
   {{$value.last_time | dateFormat}}
   {{/each}}

6.js为Object对象动态添加属性和值

var obj = {}; 
var key = "name";
var value = "张三丰"
obj[key] = value;

7.MongoDB中无限级导航分类方法

//无限级分类
cateToList(cArr, pid = 0, format ='|--') {
let result = []
function render(cArr, pid, format, level = 1) {
let data = cArr && cArr.length > 0 ? cArr : [];  // 将数据传入
if (data.length == 0 ) return [];  // 判断数据是否为空
for (let i = 0; i < data.length; i++) {
if(data[i].pid == pid) { // 判断pid是否和父级匹配
if (pid != 0) {  // 匹配是否为一级栏目
data[i]['title'] = format + data[i]['title']    //添加format
}
data[i]['level'] = level  //设置级别进行分类管理
result.push(data[i])     //将符合条件的数据导出来
render(data, data[i]._id, level > 1 ? '|'+('--'.repeat(data[i]['level'])) : format, level+1)  //递归传参 data,pid为当前的_id,判断级别,如果大于一级,则多添加标识符,并等级+1
}
}
}
render(cArr, pid, format)
console.log(result);
return result

8.通过选中的pid获取栏目名称方法,并格式化符号

记录koa2遇到问题总结

记录koa2遇到问题总结


<html>
 <head></head>
 <body>
  <div class="col-sm-10"> 
   <select name="pid" id="pid"> {{each catelist}} <option value="{{@$value._id}}">{{$value.title}}</option> {{/each}} </select> 
  </div> 
  <input type="hidden" name="catename" id="catename" value="{{catelist[0].title}}" />  <!--隐藏获取>
 </body>
</html>


 //JavaScript

        //分类改变的时候  把分类的名称赋值给隐藏的表单域
        var pidDom = document.getElementById('pid');
        var catenameDom = document.getElementById('catename');
        var options = pidDom.getElementsByTagName('option');
        //转格式获取类目
        pidDom.onchange = function () {
            //分类改变的时候 获取选中的值 赋值给  catename
            var converter = document.createElement("DIV");
            for (var i = 0; i < options.length; i++) {
                if (options[i].selected) {
                    converter.innerHTML = options[i].innerHTML;
                    var b = converter.innerText;
                    converter = null;
                    break;
                }
            }
            catenameDom.value = b.replace(/[&\|\\\*^%$#@\-]/g, "");
        }


每周二更新一点

[日志信息]

该日志于 2018-09-10 09:34 由 陈文超 发表在 未知 网站下,你除了可以发表评论外,还可以转载 “记录koa2遇到问题总结” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)

Copyright © 2015-2018 陈文超博客 保留所有权利 琼ICP备15003229号| 托管于阿里云 · 博客稳定运行 | 网站地图 |

返回顶部