🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

博客

Node.js:把调试日志输出到文件里

最近在调试 Node.js 应用,我需要一个简单的方法,把调试信息输出到文件里,这样在编辑器里打开日志文件,检查调试信息更方便一些。我用的是 log4js,它可以让我们把调试日志输出到控制台,文件,Redis,SMTP 等等。

Node.js:Adonis 框架 Service Providers

前面我们了解过怎么把依赖绑定到 IoC 容器里,下面继续往后看看关于 Service Providers 的东西,了解怎么发行与 Adonis 生态系统相兼容的包。

介绍

ioc.bind 方法可以用来注册绑定,不过现在还没有明确的说明要在哪里调用这个方法。这就是 Service Providers 做的事情。Service Providers 就是简单的类,里面带着一些生命周期方法可以用来注册与启动绑定。

Node.js:Adonis.js 框架 IoC container

IoC:Inversion of Control,字面的意思是控制反转,它是一种程序设计的思路。Container 不装在哪出现,一般它都指的就是容器,只不过在什么地方出现,容器里装的东西都不太一样。下面了解一下 Node.js 应用框架 Adonis.js 里的 IoC 容器。

问题

无用抽象

先来看个程序设计问题,比如在应用里要确定数据库只被连接一次,可以把配置数据库用的代码单独放在一个文件里,然后在应用的其它地方导入这个文件里包含的东西。这段代码类似下面这样:

lib/database.js

Redux:管理 React.js 应用的数据流动


你知道 React.js 是个前端应用框架,但你经常看到它跟 Redux 一块儿出现,于是就懵了。Redux 可以作为应用里面的一部分,它可以帮我们管理应用里面的数据(State Management)。应用复杂到一定程度的时候,你需要一套更好的方法来控制各种组件上面显示的数据。

宁皓网最近推出的 Redux 课程,帮你理解 Redux 上的核心概念,还介绍了在 React 应用上使用 Redux 的方法。如果你用的是 Vue.js 框架,可以使用 Vuex 来管理应用数据。

订阅宁皓网,来学一下用 React.js 开发前端应用。

2018

努力,奋斗 ~

GraphQL:用 Graphcool 创建一个 GraphQL 后端服务

每个前端,移动端开发者都应该了解一下 GraphQL。要试一下 GraphQL,你得去搭建一个 GraphQL 后端服务,可以用 Node.js,Rails,Django 等等。最近宁皓网录了个课程,介绍了用 Node.js 创建一个 GraphQL 后端服务。等不及的话,你可以找个现成的服务。比如 Graphcool,它可以快速帮你创建一个 GraphQL 的后端服务。

创建一个后端服务以后,你就可以去练习 GraphQL 的查询,修改,订阅等等。

GraphQL:查询与修改(Queries and Mutations)

介绍怎么查询 GraphQL 服务。

字段:Fields

最简单的查询就是告诉 Graphql 你想要的字段是什么:

{
  hero {
    name
  }
}

查询结果:

{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}

注意看查询与结果的数据形状,它们是一致的。这是 GraphQL 最重要的一个特点,你会获取到期待的数据,服务器确切地知道客户端想要的字段。

name 字段的类型是 String,上面例子里,name 的值是 R2-D2,他是电影 Star Wars 里的人物。

上面这个例子,你要的是人物的 name,返回的是个字段串类型的数据。字段的值也可以是对象,你可以选择对象里的某些字段。GraphQL 的查询可以找到相关的对象还有它们的字段,这样客户端只需要用一个请求就可以提取大量相关的数据。如果是 REST,可能需要来回跑几次才能得到需要的数据。

GraphQL:接口查询语言介绍

GraphQL 是一种接口查询语言,还是一个服务端的用来执行查询的 runtime ,根据你的数据自己定义一个 type system 。GraphQL 不跟任何数据库或者任何存储引擎绑定在一起,它可以让你使用自己已有的代码和数据。

创建一些类型,在类型上添加字段,为每个类型上的每个字段提供一些返回数据用的方法。比如有个 GraphQL 服务可以告诉你当前登录的用户(me),可以给你返回用户的 id 还有用户名,这个 GraphQL 大概像这样:

type Query {
  me: User
}

type User {
  id: ID
  name: String
}

字段的方法:

function Query_me(request) {
  return request.auth.user
}

function User_name(user) {
  return user.getName()
}

GraphQL 服务运行以后,一般给你提供一个 URL,你可以在上面验证还有执行查询。服务收到查询以后,它会先确定查询里用的类型还有字段已被定义,然后它会执行提供的方法生成查询结果。

网站维护:视频无法播放,控制台显示:net::SPDY_PROTOCOL_ERROR

最近有些会员反应在 Chrome 上播放视频的时候出现错误:net::SPDY_PROTOCOL_ERROR。周末我看看到底是怎么回事,调试时网站可能会暂时无法使用。抱歉了啊 :)

# 2017-12-26

这是个挺奇怪的问题,我猜是 Chrome 最近升级引起的。SPDY 是个加速用的东西,Chrome 不再支持它了,我发现老版本的 Nginx 里面带个 SPDY 模块。升级了 Nginx 以后,就不带这个模块了。我猜有可能是现在浏览器不再支持 SPDY,但网站服务器仍然想用 SPDY 这个东西传输数据。所以导致了 net::SPDY_PROTOCOL_ERROR。再观察观察。

# 2017-12-28

今天发现了问题,是一个模块里设置了错误的 Header,导致一些负载均衡会报错,去掉设置无效的 Header 的代码,视频加载的时候就不会再提示 net::SPDY_PROTOCOL_ERROR 了。

机器学习:术语

参考书:《机器学习》by 周志华。学习笔记,仅供参考:)

机器学习术语

周老师在《机器学习》一书中的开始,解释了很多关于机器学习的术语。

数据集:dataset

一组数据记录就是一个数据集(dataset)。

示例:instance

数据集里的每一个记录就是一个示例(instance)。每条记录是关于一个事件或者对象的描述。示例也叫样本(sample)。

特征:feature

反映事件或对象在某方面的表现或性质的东西就是特征(feature)。也叫属性(attribute)。

属性空间:attribute space

属性张成的空间。也叫样本空间(sample space)或输入空间。

D = { x1, x2, ..., xm }

表示包含 m 个示例的数据集。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点