require

koa 项目实战(九)passport验证token

杀马特。学长 韩版系。学妹 提交于 2020-03-27 09:20:59
1.安装模块 npm install koa-passport -D npm install passport-jwt -D 2.解析token 根目录/config/passport.js const JwtStrategy = require('passport-jwt').Strategy, ExtractJwt = require('passport-jwt').ExtractJwt; const keys = require('../config/keys'); const opts = {}; opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); opts.secretOrKey = keys.secretOrkey; const mongoose = require('mongoose'); const User = mongoose.model('users'); module.exports = passport => { passport.use(new JwtStrategy(opts, async function (jwt_payload, done) { // console.log(jwt_payload); const user = await User.findById

javascript模块化编程规范

一个人想着一个人 提交于 2020-03-26 07:39:10
一、javascript模块化编程规范: 二、关于commenjs规范和AMD规范: 根本不同:前者用于服务器端同步加载模块;后者是客户端异步加载模块。 同点:两者都有一个全局函数require(),用于加载模块;只是AMD规范中的require函数需要有2个参数。 三、 CommonJS 出现时间更早,代表有: Node.js 的 模块系统 ,就是参照 CommonJS 规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。 var math = require( 'math'); 然后,就可以调用模块提供的方法: var math = require( 'math'); math.add(2,3); // 5 服务器端模块以后,很自然地,大家就想要客户端模块。而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行。 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境。   var math = require('math');   math.add(2, 3); 第二行math.add(2, 3),在第一行require('math')之后运行,必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。

AMD规范与CMD规范

馋奶兔 提交于 2020-03-25 15:36:19
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得“有理可循”。 还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。 首先,既然是模块化设计,那么作为一个模块化系统所必须的能力: 1. 定义封装的模块。 2. 定义新模块对其他模块的依赖。 3. 可对其他模块的引入支持。 好了,思想有了,那么总要有点什么来建立一个模块化的规范制度吧,不然各式各样的模块加载方式只会将局搅得更为混乱。那么在JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等

跨域详解

♀尐吖头ヾ 提交于 2020-03-23 16:17:53
https://segmentfault.com/a/1190000011145364 什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 广义的跨域: 1.) 资源跳转: A链接、重定向、表单提交 2.) 资源嵌入: <link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链 3.) 脚本请求: js发起的ajax请求、dom和js对象的跨域操作等 其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。 什么是同源策略? 同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 同源策略限制以下几种行为: 1.) Cookie、LocalStorage 和 IndexDB 无法读取 2.) DOM 和 Js对象无法获得 3.) AJAX 请求不能发送 常见跨域场景 URL 说明 是否允许通信 http://www.domain.com/a.js http://www.domain.com/b.js

孤荷凌寒自学python第125天区块链039以太坊的 erc20代币09

萝らか妹 提交于 2020-03-22 20:13:12
孤荷凌寒自学python第125天区块链039以太坊的 erc20代币09 【主要内容】 今天继续使用erc20标准规范按另一篇网络博文的教程进行复制代码来批注一个可以发行代币的智能合约。学习共用时36分钟。 (此外整理作笔记花费了约45分钟) 详细学习过程见文末学习过程屏幕录像。 【学习笔记】 一、今天参考别人的代码,然后加上了个人注释: 学习的博文地址是: https://blog.csdn.net/hantangduhey/article/details/80714656 今天认真通读源代码,并加上个人注释,感觉自己通过近二十天的学习(比较慢咯)能够读懂这些solidity代码,并完整批注了: ``` pragma solidity ^0.4.24; //作者原创博文地址:https://blog.csdn.net/hantangduhey/article/details/80714656,此处我的引用只用于学习。 /** * @title SafeMath * @dev Math operations with safety checks that throw on error 防止整数溢出问题 */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) {

nodejs这个过程POST求

China☆狼群 提交于 2020-03-22 00:09:58
下面是一个web登陆模拟过程。当我们问一个链接,你得到一个表格,然后填写相应的表格值,然后提交登陆。 var http = require('http'); var querystring = require('querystring'); http.createServer(function (request, response) { var responseString = ''; response.writeHead(200, {'content-type': 'text/html'}); // 假设是get请求 var postData = ""; if (request.method == "GET") { responseString = '<!doctype html><html lang="en">\ <head><meta charset="UTF-8" />\ <title>Document</title>\ </head>\ <body>\ <form action="/" method="post">\ <input type="text" name="name" value="xulidong" />\ <input type="text" name="password" value="123456" />\ <input type="text" name

osgi笔记

Deadly 提交于 2020-03-21 23:41:43
Bundle-Classpath可以实现内嵌jar。 一个Bundle的Activator不需要进行Export 一个Package中的类被两个ClassLoader加载,包中的Private class对于两个ClassLoader之间是相互不可见的。 Manifest语法:  name: value,我们称之为一个条目,Manifest文件有不受限制的条目个数,其中name是不区分大小写,可以包含字母数字,下划线,中划线,Value可以包含除子\r, \n之后的所有字符,name和value之间必须用一个冒号和一个空格分隔开,一行不能超过72个字符,超过72字符部分需要从下一行,以一个空格开始继续写, Manifest中空行或者全是空格的行用来划分属性group。osgi只取第一个group中定义的name value。 Osgi Manifest的条目定义形式如下,value中有多个clause(用","分隔),每个clause中包含有target,directive和attribute三部分。其具体语法请参考OSGi In action一书或者OSGI规范。不过一般不需要纠结于这一点,看了下面的一些例子相信大部分读者都能“不攻自破”,但书面表达起来的确是个问题。 Property-Name: target1; dir1:=value1; attr1=value2,

Webpack打包进阶

寵の児 提交于 2020-03-21 12:59:28
说在前面 由于使用了React直出,页面各项性能指标使人悦目。本篇将深入探讨目前PC部落所采用webpack打包优化策略,以及探讨PC部落并未使用的 webpack Code Splitting 代码分包、异步模块加载特性。看看它们又是如何对PC部落的性能起到进一步的催化作用。 为什么要使用webpack 如果你曾经使用过 Broserify, RequireJS 或类似的打包工具,并注重:代码分包、异步加载、静态资源打包(图片/CSS)。那么 webpack 就是帮你构建项目的利器!简单一句话:在webpack中,所有资源都被当作是模块,js可以引用 css , css 中可以嵌入图片 dataUrl。 webpack特性 对应不同文件类型的资源,webpack有对应的模块 loader ,比如对于 less, 使用的是 less-loader ,你可以在这里找到 所有loader . webpack 具有requireJS 和 browserify 的功能,但仍有自己的新特性: 1、对 CommonJS、AMD、ES6的语法做了兼容; 2、对js、css、图片等资源文件都支持打包; 3、串联式模块加载器以及插件机制让其具有更好的灵活性和拓展性,例如对 coffeeScript、ES6的支持; 4、有独立的配置文件 webpack.config.js; 5、可以将代码切割成不同

R中library和require的区别

柔情痞子 提交于 2020-03-21 08:48:15
library和require都可以载入包,但二者存在区别。 在一个函数中,如果一个包不存在,执行到library将会停止执行,require则会继续执行。 在 http://stackoverflow.com/questions/5595512/what-is-the-difference-between-require-and-library 看到对二者详细的说明。 require将会根据包的存在与否返回true或者false, test <- library("abc") Error in library("abc") : there is no package called 'abc' > test#library没有返回值 Error: object 'test' not found > test <- require("abc") Loading required package: abc Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called 'abc' > test#require有返回值 [1] FALSE 利用上面这一点可以进行一些操作。 if(require

requireJs和r.js压缩工具

我是研究僧i 提交于 2020-03-21 07:18:04
上面release是执行命令 node r.js -o build.js 生成的,需要切换到目录require/tools下面,也就是 有r.js和build.js的目录,才能执行命令 代码目录如上: main.html代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello RequireJS</title> </head> <body> <h1>Hello RequireJS</h1> <script type="text/javascript" src="js/lib/require.js"></script> <!-- main.js:requireJS 配置信息 --> <script type="text/javascript" src="js/config.js"></script> <!-- <script type="text/javascript" src="js/combine.js"></script> --> <script type="text/javascript"> /*如果没有配置信息,加载one,two模块,要找到他们的存放路径*/ /* require(["./js/mod/one", "./js/mod/two"], function (one, two)