Javascript原生函数作为构造函数

关于数组(array)、对象(object)、函数(function)和正则表达式,我们通常喜欢以常量的形式来创建它们。实际上,使用常量和使用构造函数的效果是一样的(创建的值都是通过封装对象来包装)。 如前所述,应该尽量避免使用构造函数,除非十分必要,因为它们经常会产生意想不到的结果。 3.4.1 Array(..) var a = new Array( 1, 2, 3 ); a; // [1, 2, 3] var b = [1, 2, 3]; b; // [1, 2, 3] 构造函数Array(..) 不要求必须带new 关键字。不带时,它会被自动补上。 因此Array(1,2,3) 和new Array(1,2,3) 的效果是一样的。 Array 构造函数只带一个数字参数的时候,该参数会被作为数组的预设长度(length),而非只充当数组中的一个元素。 这实非明智之举:一是容易忘记,二是容易出错。 更为关键的是,数组并没有预设长度这个概念。这样创建出来的只是一个空数组,只不过它的length 属性被设置成了指定的值。 如若一个数组没有任何单元,但它的length 属性中却显示有单元数量,这样奇特的数据结构会导致一些怪异的行为。而这一切都归咎于已被废止的旧特性(类似arguments 这样的类数组)。 3.4.2 Object(..)、Function(..) 和RegExp(..) 同样,除非万不得已,否则尽量不要使用 Object(..)/Function(..)/RegExp(..): var c = Read more…

用在线IDE写vue代码

上周末无意中发现了一个新的在线IDE,网址glitch.com,个人感觉很不错,于是顺便关注了下其它的在线IDE,比如codesandbox.io也不错,没有细看,可能自己已经先入为主的喜欢上glitch了吧。 下面主要说说glitch,打开官网后可以新建一个工程,一般会让你选择网站型项目还是node型项目,试了试node型项目的功能强大些,推荐一律用这种类型。这里有一个server.js, app.get(‘/’, (request, response) => { response.sendFile(`${__dirname}/${dist}/index.html`); }); 这里就是默认把index.html作为首页来当项目的入口 写过vue,并且运行过npm run build的都知道,vue打完包的入口就是index.html,所以这里根据自己项目的打包后的情况修改一下就行了。 有的同学肯会问,这个glitch还能运行node命令不成?目前我没有发现它有这个功能,那怎么实现打包呢?在package.json里面设置, “scripts”: { “dev”: “webpack-dev-server –inline –progress –config build/webpack.dev.conf.js”, “start”: “npm run build && node server.js”, “lint”: “eslint –ext .js,.vue src”, “build”: “node build/build.js” }, 我们要用的就是package.json的start命令,因为我发现glitch查看自己项目的时候会自动运行package.json里面的start命令,来让该项目能够跑起来,所以我们可以在start里面先打包(npm run build)再启动node服务器(node server.js),你的项目就是在这个node服务器下面运行的,它就这样跑起来了。 说没了就是运行webpack和node,重点是配置后webpack 既然是node项目,一定是要安装插件的喽。 glitch安装node插件超级爽 点击package.json然后简单操作一下就行了 今天发现glitch项目貌似有大小限制,128M,我是在导入工程时看到的提示,还没有在官方那确认。 目前我搞了一个vuecli建的空项目,大家可以直接remix然后使用,地址 https://vuecli.glitch.me。我还特意试了试vue.glitch.me,这个域名被用了,是一个哥们写的todolist项目,还没写完。

nodejs express获取请求参数(get,post)

如果访问的接口地址成http://127.0.0.1/index?id=1,我们怎么获取index,怎么获取id=1呢? 我们为了得到index,我们可以通过使用req.params得到,通过这种方法我们就可以很好的处理Node中的路由处理问题,同时利用这点可以非常方便的实现MVC模式; 通过使用req.query.id就可以获得获取客户端get方式传递过来的值,类似于PHP的get方法; 如果在请求时post了title=daozhao,我们怎么获取title=daozhao呢? 可以通过req.body.id获取获取客户端post过来的数据,类似于PHP的post方法; var express = require(“express”); var bodyParser = require(“body-parser”); var app = express(); // need it… app.use(bodyParser.urlencoded({ extended: false })); app.post(‘/login’, function(req, res) { var user_name = req.body.user; var password = req.body.password; console.log(“User name = ” + user_name + “, password is ” + password); res.end(“yes”); Read more…

道招网正式开启https

之前我只是对微信小程序好奇,搞了个子域名 https://w.daozhao.com,现在发现越来越多的场景需要https,加上现在的主机貌似只支持一个域名用ssl证书,单独买个多域名ssl证书比较贵,暂时没有必要,经过考虑,觉得主站www.daozhao.com使用ssl证书开启https时代,子域名就暂时不用证书了,也可能会逐步关闭,毕竟知道的人又不多,用的人更好。 现在我顺便记录下自己http转到https的过程吧。 一、搞到ssl证书 我是在西部数码买的证书,基本不要钱,懒得在网上找。 在主机上配置好证书,不支持的可能等换主机了 在确定网站可以使用https访问后进行下一步 二、进入管理界面,设置-常规修改“WordPress地址”(URL)和“站点地址(URL)”,改为https开头的 三、保险起见,修改数据库,主要是修改里面的保存文章的那张表wp_posts,还有保存缩略图的那张表wp_postmeta 执行sql语句 update wp_posts set post_content = replace(post_content, ‘http://www.daozhao.com’,’https://www.daozhao.com’); update wp_postmeta set meta_value = replace(meta_value, ‘http://www.daozhao.com’,’https://www.daozhao.com’); 四、登录和后台强制开启ssl,修改根目录的WP-config.php文件,直接在文件末尾加入以下两行代码 /* 强制后台和登录使用 SSL */ define(‘FORCE_SSL_LOGIN’, true); define(‘FORCE_SSL_ADMIN’, true); 五、让原来的页面直接跳转至https页面 修改根目录的.htaccess文件 # BEGIN WordPress <ifmodule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} !^on$ [NC] RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] Read more…

前端模拟后端接口进行调试之easy-mock篇

之前写过一个方便大家本地调试的博客《前端模拟后端接口进行调试之NODE+MYSQL篇》,主要是方便没有网的筒子开发?没网?原始社会?是的,我现在待的单位就不能连外网。。。 今天给大家推荐一个联网的同志们可以用的,超级方便,还支持函数来显示不同的数据,官方称其为响应式数据?它就是easy-mock 还是用上一篇文章的数据,看看如何用easy-mock来实现,分页也同样很轻松。 { “responseCode”: “001”, “responseMsg”: “”, “data”: { “all”: [{ “title”: “firsttitle”, “id”: “1” }, { “title”: “这是标题”, “id”: “2” }, { “title”: “一篇文章”, “id”: “3” }, { “title”: “又一篇文章”, “id”: “4” }, { “title”: “第五篇文章”, “id”: “5” }, { “title”: “第六篇文章”, “id”: “6” }, { “title”: “第七篇文章”, Read more…

wordpress的restfulAPI接口返回数据的几点分析与处理

想让wordpress作为后端提供数据,必不可少的就是调用xxx.com/wp-json/wp/v2/posts这个接口了,(具体内容请参考官方文档)该接口返回一个文章列表,数组中的每条文章返回了该文章的详细信息,其中自然办好文章的分类categories和标签tags了,做过项目的都知道,这类数据一般也不推荐直接返回文字信息,一般都是返回码值,根据映射关系找到对应的文字。 从图中可以看到:分类categories和标签tags返回的都是数组,里面的数字代表了对应内容的id,需要根据id在调用相应的查询接口获得文字信息。 分类信息和标签信息里面相对麻烦点的是分类信息,因为分类信息可能有父子级的关系,而标签则不存在,是扁平化返回。下面说说我是怎么处理分类的,最实际的应用场景就是博客上方的导航菜单。 首先我们肯定是调用接口xxx.com/wp-json/wp/v2/categories获取博客里面的所有分类categories信息,这里最好将每页返回的数据条数设置大一点,方便一致性返回全部分类信息,看下接口返回格式 截图屏幕有限,具体的大家自行调用,我说一下吧,分类信息全是扁平化返回,用一个数据返回,比如你有2个大分类,里面各有3个消费,则接口换返回里面有2+2*3=8个对象的数组,唯一的区别是父分类的parent字段为0,子分类的parent字段则是对应的父分类的id。估计后端同事都喜欢这么干,确实很方便。但是前端的同志就苦逼了。扁平化数组?循环?该怎么样渲染更方便? 本例中有五个大的分类,id分别是39、54、477、600、1020其中54、600、1020有子分类,进行处理后返回一个大的对象,每个大类有children字段,其为数组,里面是一堆他的子分类。 图中id为127的就是54这个大分类的子分类。处理代码如下: function postsHandle(data) { let categoriesObj = {}; let categoriesMap = {}; if (data && data.length) { data.map((item, index) => { categoriesMap[item.id] = { name: item.name, slug: item.slug }; if (item.parent != ‘0’) { //子分类 if (!categoriesObj[item.parent]) { //其父分类不存在 categoriesObj[item.parent] = { id: item.id, Read more…

前端框架vue+wordpress做后端

目前正在利用闲暇时捯饬一下自己的博客,毕竟这么久没有维护了,wordpress是可以用restful API来获取数据的,决定前端用vue实现,目前正在尝试中,今天做了其中很小的一部分,就是博客目录,样式暂时没写,直接照抄原来的主题样式,后期在优化。 欢迎大家一起。 github地址:https://github.com/shadowprompt/daozhao_vue_ssr 效果预览直接看本站就可以了啊。 2020年4月23日,更新了项目最新地址,并且之前的vue预览版已经转成正式版,道招网正式启用vue版前端

前端模拟后端接口进行调试之node+mysql篇

有时前端在开发过程中肯定是会跟后端联调的,但是如果此时后端可能没有开发好,或者因为其它优先级高的事情无法联调,又或者是前端需要确保当前项目无明显bug后着手开发其他项目。这个时候如果能模拟后端接口数据,就能做到自己调试,等到真正和后端联调时就很轻松了。 既然这篇是node+mysql篇当然本机上要按照好node和mysql(本例中是用的pc上安装wampserver的方案)。 第一步,用node安装express、body-parser和mysql npm install express body-parser –save npm install mysql –save-d 用node实现接口 api.js var path = require(‘path’); var express = require(‘express’); var bodyParser = require(‘body-parser’); var mysql = require(“mysql”); var app = express(); //mysql的连接池 var pool = mysql.createPool({ host: ‘localhost’, port: 3306, database: ‘test’, user: ‘root’, password: ” }) Read more…

VSC:Cannot connect to the target: connect ECONNREFUSED 127.0.0.1:9222

最近想试试微软的编程IDE visual studio code,江湖简称VSC,按F5可以进行debug,之前用了一直还没有报错,后来随便弄了一下chrome,在用vsc的调试模式就报错了,提示内容是 Cannot connect to the target: connect ECONNREFUSED 127.0.0.1:9222, 在百度搜一下,出现这个问题的同学还是不少啊,但是一些问答社区好像并没有给出解决方案,可能是同志们找到了解决方法,但是没有公开吧。于是我在Google上搜了一下,找到了解决方案,里面好像vsc的开发人员进行了解答。 杀掉所有chrome进程,就可以了,此时再按F5就能进入调试模式了,并且访问http://127.0.0.1:9222/json就会看到页面返回一堆json 官方也在努力同chrome团队解决这个问题。 原文地址点此访问

安装运行angular2

现在官方貌似推荐用typescript来开发Angular,访问官方网站http://angular.io,点击Get Started,就会跳转到https://angular.io/docs/ts/latest/quickstart.html,这里是开发入门示例。但是实际上一般我们按照官方的配置还是把官方的示例跑起来,因为我们还缺少一些东西未下载,官方的示例也并没有提醒小白们。 首先我们得安装nodejs(版本在6.x以上),它里面已经自带了npm。安装官方的介绍运行npm install之后,我们还要在项目中安装rxjs, npm install rxjs 没有正常安装的时候运行npm start或者http-server运行服务器,打开http://127.0.0.1:8080/只会看见页面上出现 loading,这是因为index.html里面有如下代码: <body> <my-app>Loading…</my-app> </body> 未能正常加载组件app.component.ts import { Component } from ‘@angular/core’; @Component({ selector: ‘my-app’, template: ‘<h1>My First Angular App</h1>’ }) export class AppComponent { } 出现的错误一般是 Failed to load resource: the server responded with a status of 404 (Not Found) angular2-polyfills.js:332 Read more…