Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all 14821 articles
Browse latest View live

[美团][上海][金融服务平台]内推前端开发

$
0
0

工作职责

  • 负责网站和手机终端的界面交互开发;
  • 负责建设前端系统架构。

职位要求

  • 精通 HTML/CSS/JavaScript 等前端技术,能轻松写出符合 W3C 标准、兼容主流浏览器的代码;
  • 熟悉至少一种 JavaScript 框架或者对 JavaScript 语言掌握较深;
  • 掌握至少一门非前端开发语言(如 PHP/Java/Python/Ruby 等),并有一定的实战经验;
  • 较强的逻辑思维能力,善于分析、归纳、解决问题。

简历可以发: ZG9uZ2JpbmdzZW5AbWVpdHVhbi5jb20=


mean项目的疑问,应该是架构问题或者代码的理解问题。新手求问。

$
0
0

首先多谢能进来看看。主要是自己写代码时候遇到的问题。 最近开了一本源于mean框架下搭建服务的书。自己写了一个关于这个框架。书上介绍的很简单。基本上就是路由直接连接mongo就结束了。一点关于controller,service,dao层的描述都没有。自己凭着当初学java时候的印象补上了这些东西,然后果然出问题了。括弧笑。 首先来看看结构 图片.png package.json文件 图片.png如图所示啊。 bin什么都没有。router,controller,service,dao不用多说了,views是html文件的家,(我没使用模板引擎,打算前端页面控制直接使用angular),public是客户端的js,css,image文件的地方。 结构知道了。 基本的后台流程我思考的是: (一系列前台的操作,暂无问题,暂不赘述)》》》app.js》》》router》》》controller》》》service》》》dao》》》response.json返还json值。交给前端的angular去渲染页面。 那现在就是有问题了。 只要是中间件的问题。我在别人的博客上看见了关于monk的使用法。导入了monk(package.json可见); 导入使用都没有问题但是使用时候我发现了一个问题 图片.png如上图所示代码。我在dao层写的都是构造函数。当service层要使用这个dao层代码时候是先做个实例。然后用实例的方法来共同数据库来取得数据。 service层部分代码如下图 图片.png我本来是想的直接使用return 回去dao层查到的数据。但是发现返回的数据是undefined;原因是 图片.png上图所示的红框部分的代码是异步的。神tm异步的。reObj没有等到赋值。直接返回了。神tm直接返回了。然后我就想到中间件的使用法。或者是阻塞的使用法。最后的结果是我神TM不会。。。。。。咋办呢? 我想到的办法是使用参数。 从控制层开始把流程参数写进去。。。如下代码所示。 router代码 图片.png controller代码 图片.png service代码 图片.png dao代码 图片.png这样就可以执行了。可是,可是,可是; 这个只适用一个表的查询。要是查两个表怎么破? 艹艹艹。 最后还是想不到办法。 早听说咱这神人辈出,高手如云。希望能有朋友帮我这个忙。帮我指点下。是不是当初我想的思路就是错误的。还是我学的时候漏了什么部分。 多谢指点。

【开源免费】接口管理平台 eoLinker V3.1.7发布 + 开源版部署指南一份

$
0
0

前言

eoLinker是目前全球领先、国内最大的在线API接口管理平台,提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能,旨在解决由于前后端分离导致的开发效率低下问题。

目前eoLinker为Google、IBM、腾讯、中国联通、海尔、神州优车、国美等数千家企业提供快速、专业、稳定的API管理服务。

同时eoLinker还是Google谷歌开发者联盟的合作产品与企业,不定期举办线下交流分享活动促进国内API管理领域的发展。


eoLinker AMS开源版 V3.1.7更新日志

新增:
  1. 更加开放的开源态度,开源项目协议从GPL更改为Apache 2.0。
  2. 支持项目备份功能,一键将项目数据同步到线上账号,从此不再害怕数据丢失问题 。
  3. 新增API自动化测试功能,自定义接口测试顺序以及数据关联等,让接口测试进入自动化时代。
  4. 新增数据库备份功能,选择手动更新或自动更新都会自动备份数据库到dump文件夹 。
修复:
  1. 修复安装失败仍然提示已安装的问题,优化安装逻辑(返回错误信息,方便调试);
  2. 修复参数类型选择‘文件’不出现文件选择按钮的问题;
  3. 修复在接口详情页面中无法删除接口的问题;
  4. 修复导出项目数据的问题。
优化:
  1. 优化手动更新和自动更新的逻辑;

如何在本地部署eoLinker开源版

环境要求
  • PHP 5.5+ / PHP7+(推荐)
  • Mysql 5.5+ / Mariadb 5.5+
  • Nginx(推荐) / Apache
  • 项目目录需要具有完全的读写权限(777),用于写入配置文件。安装完成之后可以设置另外设置目录权限
  • PHP需要安装并启用mbstring以及curl模块,用于字符串处理以及接口测试功能

注意事项
  • 3.x版本与2.x版本并不兼容,因此无法直接由2.x升级到3.x,也无法通过覆盖代码的方式进行升级,切勿随意尝试以防数据丢失。
  • 如果需要进行数据的迁移,可以使用eoLinker接口管理系统中的【导出项目】功能:将项目导出为eoLinker专用格式(.export),然后在3.x版本中导入。
  • 为了防止数据丢失,请在执行任何关键操作之前妥善备份数据库。

获取地址

社区支持

安装

从Github等途径获取开源版代码之后,目录结构如下:

目录结构

其中:

1.backend_resource:后端源码

2.frontend_resource:前端源码(未压缩,使用Angular进行编写)

3.release:安装包,可用于直接安装

打开release文件夹,找到最新版本的压缩包,解压到合适的PHP环境下,并且通过浏览器访问项目根目录。如果正常则会转到如下引导页面:

语言选择页面

引导页

环境检测

安装完成

根据指引页面提示,输入相应信息并且通过环境监测后,即可安装成功。随后页面会跳转至 用户注册页面

开源版的使用操作与线上免费版基本同步,如有任何使用的问题请参考 线上版操作指南

更多更全的教程和内容尽在eoLinker中文网址:https://www.eolinker.com

egg-core源码疑惑

$
0
0

读了一下源码,读到egg-core这里。

发现了这个 EGG_LOADER, 源码只有3个地方引用到,同文件内…

1.png

https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L20

2.png

https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L116

3.png

https://github.com/eggjs/egg-core/blob/master/lib/egg.js#L338

EGG_LOADERSymbol类型,挂载在 EggCore的原型上。

那么EggCore.prototype[EGG_LOADER]应该是私有方法,仅供内部使用的

神奇的是,那你把图二中的this[EGG_LOADER]替换成图三的内容,即require('./loader/egg_loader')

跑测试立马报错,请问这是什么黑科技?

EGG_LOADER是egg.js文件中的变量,并没有exports出去。 那么意味着跑的测试用例,实例化的eggCore,也是没办法获取到EggCore.prototype[EGG_LOADER]的 那么测试是怎么失败的呢

大家好 有人用koa2框架吗? 我在view层里面获取不到ctx.state的值是怎么回事

$
0
0

这个ctx.state里面的loginbean111111.png

这个是在view层里面的loginbean 获取不到2222222.png

这个是报错信息 说loginbean找不到333333.png

求node包(download-git-repo)的使用方法!

$
0
0

想构建一个脚手架,但是用download-git-repo报错:‘git clone’ failed with status 128

download(‘github地址’, process.cwd(), { clone: true }, function (err) { if (err) console.log(err) })

求指点这个包怎么用?我想让脚手架工具的模板是从github上下载的而不是和工具放在一起的!

请问大佬们child_process.spawn怎么运行动态js代码

$
0
0

需求是这样的,前端传过来动态代码,我要使用子进程运行,过滤错误,有错误提示前端,代码格式错误。 全部正确,保存到数据库。虽然这个寻求很不可思议,但是产品就这样要求的。

运行动态js代码也是nodejs代码,用来请求另一台服务器。我现在的模式是将js动态代码写成js文件 在child_process…execFile开启子进程去运行它,判断是否错误。

请问大佬们child_process.spawn怎么直接运行js动态代码,而不用文件形式

感激

基于 connect 的 web 应用程序框架 webium

$
0
0

这个框架在 connect的基础上对 reqres增加了更多的属性的方法,它既有 express风格,也有 koa风格,同时支持绝大多数 connectexpress所支持的中间价/插件。

它体积非常小,但功能并不少,koa有的,它基本都有,express有的,也大多有,除了路由(当然已经有第三方的 connect模块对其提供)。

connect的文档有点缺少并且错误,因此这个框架自己提供了一个 .d.ts文件,来提供完整的 IDE 支持。

示例:

const { App } = require("./index");
const http = require("http");

var app = new App();

app.use((req, res) => {
	// Print out some request imformation:
	console.log("Client IP:", req.ip);
	console.log("Requested href:", req.href);
	console.log("Requested hostname:", req.hostname);
	console.log("Accepted Language:", req.lang);

	// Set some response information.
	res.cookies.username = "Luna";
	res.refresh = 5; // refresh the page every 5 seconds.

	res.send("<p>Hello, World!</p>"); // text/html;
}).listen(80);

在性能上,下面是 JMeter 压力测试的结果:

webium.res.end:
	10000 in 00:00:06 = 1721.8/s Avg:   292 Min:     1 Max:  2207 Err:   546 (5.46%)
webium.res.send:
	10000 in 00:00:07 = 1456.9/s Avg:   368 Min:     2 Max:  2294 Err:   906 (9.06%)

express.res.end:
	10000 in 00:00:06 = 1572.8/s Avg:   336 Min:     1 Max:  1970 Err:   706 (7.06%)
express.res.send:
	10000 in 00:00:07 = 1456.2/s Avg:   356 Min:     2 Max:  2187 Err:   841 (8.41%)

koa.ctx.body:
	10000 in 00:00:06 = 1738.2/s Avg:   263 Min:     1 Max:  2133 Err:   360 (3.60%)

connect.res.end:
	10000 in 00:00:05 = 2066.1/s Avg:   210 Min:     0 Max:  2127 Err:   208 (2.08%)

由于 webium对某些属性进行了预计算,因此在 Hello, World!这些简单响应中会比 koa稍差一些,但在更复杂的场景下,它会比每一次使用都重新计算的的 koa表现要好些。

同时,webiumres.send()放大,提供更多的类型检测,能够自动判断响应的字符串是 HTML 还是 XML, 或者 JSON,并且,沿袭 express 的风格,在处理相同的响应内容时,发送 304 响应,而不是 200。

GitHub: https://github.com/Hyurl/webium


自己刚买的Mac,node出问题,不知道怎么卸载,官网直接下的

Nodejs cms内容管理框架 DoraCMS v2.0.4 版本更新

$
0
0

可能是2017年内的最后一个版本,近期DoraCMS更新到 2.0.4,主要对样式做了变更,也修复了一些bug。具体如下

1、添加系统支持redis缓存,通过开关控制,并添加通过redis缓存数据中间件。要知道redis在存储性能方面MongoDB要好很多(主要存储session数据) 。 sass列表.png 2、重新整理了样式,组件样式全部单独提取,提高可维护性。 sass列表.png 3、文档详情页添加了“喜欢”功能,需要在mongodb执行脚本。 喜欢功能.pngdb.contents.update({},{"$set":{"likeUserIds”:[]}},{multi:true}) 4、修复了某些场景下批量删除留言异常的bug。 5、添加了二维码分享功能。 6、添加了回到顶部按钮。 7、优化了包括 最新文档、近期文档、推荐文档等模块的代码结构。 8、优化了用户中心的界面和交互。 9、修复页面跳转后滚动条不置顶的问题。 10、修复了某些场景下通过标签查询,分页异常的问题。 11、优化了cms在移动端的显示。 12、修复了一些明显bug。

更新方法:

1、checkout 最新 2.0.4代码 2、删除 node_modules,重新安装依赖包 3、启动数据库,执行npm run dev

说明

DoraCMS 使用的技术栈:

1、vue + vuex + vue-router 全家桶 2、webpack 2 3、nodejs 8.0 + express 4 4、mongodb 3+

源码: DoraCMS演示地址: 前端开发俱乐部
后台登录: https://www.html-js.cn/dr-admin测试账号:doracms/123456

部署文档: 前端内容管理框架 DoraCMS2.0 部署介绍

请问egg源码中 message里为什么还多出一个parent

$
0
0

sssssss.png

看到egg-readyr启动时默认是 master -> app ,master -> agent master -> parent

master进程还有parent进程吗,如图所示,message里的sendToParent方法process.send master进程向parent进程发送消息。

但是在master没看到parent进程如何产生的。请教大佬们
感激!!

let's leetcode.

node新手, 使用finalhandler 时报错

要把项目向产品化转变第一步需要怎么做?

$
0
0

要把项目向产品化转变第一步需要怎么做?

cnode广告投放联系谁?


去哪儿 Api 自动化测试实践

$
0
0

背景

越来越多的应用基于前后端分离构建,后端提供数据接口,前端调用接口返回 json 数据渲染到 UI,这个时候保证后端接口数据正确性变的愈来愈重要,接口测试就是来解决这个问题。很多团队,接口测试就是手动运行接口,肉眼比对接口返回的数据,这样的操作流程效率低下,容易出错。使用 YApi 只需要在可视化 GUI 下,配置下每个接口的入参和对 RESPONSE 断言,即可实现对接口的自动化测试,大大提升了接口测试的效率。

准备工作

如果您还未部署 yapi 接口管理平台,可先去示例站点试用。

在创建完项目和接口后,需要进入到测试集页面,导入需要测试的接口。

import-api

基础概念

需要学习的基础概念主要包含测试集、Pre-Script 、Test-Script 三方面。

测试集

在平时的开发过程中,经常遇到的一个问题是每次调试接口都需要重新填写参数,YApi测试集能够保存之前填写的参数,方便下次的调试。每个的请求参数还可以通过前面已请求的接口数据读取,或填写mock随机字符串,通过设置断言脚本验证返回数据的正确性。

case

Pre-Script

pre

Pre-Script 包括请求参数处理脚本和响应数据处理脚本两部分。通过自定义 js 脚本方式改变请求的参数和返回的 response 数据。他的使用场景如下:

  • 接口请求参数需要加密及返回 response 解密
  • 接口请求参数需要添加计算 token

请求参数处理脚本示例

以 jquery ajax 为例,假设当前的请求参数是

{
  url: '/api/user?id=1',
  method: 'POST',
  headers: {
    xxx: 'xxx'
  },
  data: {
    type: 1
  }
}

那么公共变量 context 包含以下属性:

context = {
  pathname: '/api/user',
  query: {
    id: 1
  },
  requestHeader: {
    xxx: 'xxx'
  },
  method: 'POST',
  requestBody: {
    type:1
  }
}

假设我们需要在 url 增加一个 token 参数,可以写如下自定义脚本:

返回数据处理脚本示例

在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性:

context = {
  pathname: '/api/user',
  query: {
    id: 1
  },
  requestHeader: {
    xxx: 'xxx'
  },
  method: 'POST',
  requestBody: {
    type:1
  },
  responseData: {
    a:1
  },
  responseHeader: {
    content-type: 'application/json'
    ...
  }
}

假设我们需要修改响应数据 responseBody a 的值为 2,可以填写如下自定义脚本:

Test-Script (测试脚本)

通过自定义脚本断言接口参数或返回 response 数据,在接口用例页面点击 Test 编辑。

支持的公共变量

1.assert
  • assert(value)

    判断 value 是否为 truth, 例如 assert(1) 通过, assert(0) 不通过,只要 value 不是 null, 0, false等值验证通过

  • assert.equal(actual, expected)

    判断 actual 是否等于 expected,例如 assert(1, 1)通过

  • assert.notEqual(actual, expected)

    判断 actual 是否不等于 expected

  • assert.deepEqual(actual, expected)

    假设: actual = {a:1} 是一个对象,即便 expected = {a:1},如果使用 assert.equal 可能也是不相等的,因为在 js 引用的只是对象的一个指针,需要使用 assert.deepEqual 比较两个对象是否相等

  • assert.notDeepEaual(actual, expected)

    深度比较两个对象是否不相等

2.status

http 状态码

3.params

http request params, 合并了 query 和 body

4.body

返回 response body

5.header

返回 response header

6.records

记录的 http 请求信息,假设需要获取 key 为 555 的接口参数或者响应数据,可通过 records[555].params 或 records[555].body 获取

7.log

log(message) 函数,调试时使用,log 信息仅仅在断言失败后打印

示例

assert.equal(body.errcode, 0)
assert.equal(body.data.group_name, 'testGroup')
assert.equal(status, 200)

开始测试

第一步:配置参数

YApi 除了支持常量字符串外,还支持 mock 随机字符串和变量字符串。

Mock参数

Mock 参数每次请求都会生成随机字符串,支持 mockjs 所有占位符

变量参数

YApi 提供了强大的变量参数功能,你可以在测试的时候使用前面接口的 参数返回值作为 后面接口的参数,即使接口之间存在依赖,也可以轻松 一键测试~

格式:

$.{key}.{params|body}.{path}

例如:现有两个接口,分别是“导航标题”和“文章列表”

文章列表接口需要传参数: 当前标题(id),而这个 id 需要通过 导航标题的返回值获取,这时应在 文章列表的参数输入框中根据前者的 key 找到对应 id。

导航标题的参数和返回值有如下结构:

参数:

返回值:

文章列表的参数可以如下配置:

其中 $.是使用 动态变量的标志,$.269.params即表示 key 值为 269 用例的请求参数,$.269.body即表示 key 值为 269 用例的返回值。

Tips: 上下拖动测试集合的列表项可以调整测试的顺序。

目前yapi中的querybody,headerpathParam的输入参数已经支持点击选择功能。无需自己填写表达式,只需在弹窗中选择需要展示的表达式即可。 输入选项包括常量mock数据,在测试集合中也支持变量选择。 具体用法:单击编辑按钮打开表达式生成器,点击需要的数据创建表达式,这里也可以实时查看表达式结果。

第二步:开始测试

case

在测试列表可以看到每个测试用例的 key,还有 开始测试、报告等功能 点击开始测试会按照 case 定义的参数从上往下一个一个进行测试,如果顺序有问题,可以拖动调整 测试完成之后,点击报告查看该次请求的结果

后记:

YApi 自动化测试大大简化了接口测试数据准备,和验证环节,目前去哪儿测试团队已经开始使用。未来 YApi 将会持续优化自动化测试功能,希望大家提出大家宝贵的意见。

开源接口管理平台 YApi 官网

Github: YApi github

入门到放弃node系列之express-gateway网关

$
0
0

前言

本文首发公众号 【一名打字员】

网上墙内关于这方面的文章真的很少,本猿也是通过官网一点一点学习,希望能够帮助到大家。express-gateway官网

安装

  • 安装Express Gateway
npm install -g express-gateway
  • 创建一个项目
eg gateway create
  • 初始一些基本信息配置
eg gateway create
 ? What is the name of your Express Gateway? my-gateway
 ? Where would you like to install your Express Gateway? my-gateway
 ? What type of Express Gateway do you want to create? (Use arrow keys)
 ❯ Getting Started with Express Gateway
   Basic (default pipeline with proxy)
  • 启动
cd my-gateway && npm start

这样基本的一个项目就已经成型了。

使用方法

指定服务并把API暴露出来(API提供者)

  • 第一步

我们会发现,项目中已经把代理了一个现有的服务 https://httpbin.org/ip ,并对其进行管理。它提供了一个json的输出,我们可以展示一下快速网关的功能。访问 https://httpbin.org/ip,会有以下输出:

{
  "origin": "218.80.1.67"  #自己的IP
}
  • 第二步

image.png

该服务被指定为快速网关中默认管道的服务端,网关有自己的代理策略,之前的 https://httpbin.org/ip则是网关设置的一个服务请求。配置在config目录下的 gateway.config.yml文件。

http:
  port: 8080
admin:
  port: 9876
  hostname: localhost
apiEndpoints:
  api:
    host: localhost
    paths: '/ip'
serviceEndpoints:
  httpbin:
    url: 'https://httpbin.org'
policies:
  - basic-auth
  - cors
  - expression
  - key-auth
  - log
  - oauth2
  - proxy
  - rate-limit
pipelines:
  default:
    apiEndpoints:
      - api
    policies:
    # Uncomment `key-auth:` when instructed to in the Getting Started guide.
    # - key-auth:
      - proxy:
          - action:
              serviceEndpoint: httpbin 
              changeOrigin: true

可以看到这里配置了一个默认的服务端点,网关会在默认代理策略中找到 httmbin

  • 第三步

image.png

接下来我们需要让 httpbin服务作为一个API端点穿过网关,并当这个API公开时,可以被外部所访问。 在上面的 gateway.config.yml配置文件中,我们找到 apiEndpoints这个设置,其中有一个 api的设置项。

apiEndpoints:
  api:
    host: localhost
    paths: '/ip'

PS:默认情况下,API请求路径将被代理策略挂在服务端点中。

  • 第四步

image.png

现在我们就可以通过网关来访问API了,访问 http://localhost:8080/ip

创建API消费者

方便管理API,我们将允许使用API的授权用户称为“消费者”。如用户的创建,进入项目根目录,创建:

eg users create
 Enter username [required]: mrpan
 Enter firstname [required]: coder
 Enter lastname [required]: coder
 Enter email: 1049058427@qq.com
 Enter redirectUri: www.baidu.com
√ Created 892775c8-80c5-480e-b596-6cb3133691f2

 "firstname": "coder",
 "lastname": "coder",
 "email": "1049058427@qq.com",
 "redirectUri": "www.baidu.com",
 "isActive": true,
 "username": "mrpan",
 "id": "892775c8-80c5-480e-b596-6cb3133691f2",
 "createdAt": "Sat Dec 16 2017 13:21:13 GMT+0800 (中国标准时间)",
 "updatedAt": "Sat Dec 16 2017 13:21:13 GMT+0800 (中国标准时间)"

API权限认证

  • 第一步

现在我们的API是公开的,没有进行权限的控制,所以任何人都可以对它进行访问。我们现在用密钥授权对它进行保护,首先必须要将这个授权策略加入在配置文件 gateway.config.yml中。

pipelines:
  - name: getting-started
    apiEndpoints:
      - api
    policies:
      - key-auth:
      - proxy:
        - action:
          serviceEndpoint: httpbin
          changeOrigin: true
  • 第二步

image.png

将密钥分给上面的用户 mrpan

eg credentials create -c mrpan -t key-auth -q
10b9Yaalb982DreBukZvGf:3A2bhd1xzqwAvNWX0QfjD5

PS:上面的-q选项是将输出限制为api的key,便于粘贴复制。

  • 第三步

image.png

再次访问 http://localhost:8080/ip,这个时候便不会打印结果了,只会打印出 Unauthorized

  • 第四步

image.png

我们在访问的时候把key加上。这样,就能继续使用API了。

到这里,网关的基本使用也就差不多了,大家可以梳理一下在自己的系统中进行扩展。

结语

现在大多大型网站架构都采用了微服务的模式,把系统拆分成一个一个的微服务,服务层可能会使用java或者使用其它语言编写,毕竟有Netflix这样的先例,成功的使用Node.js API网关及其JAVA后端来支持广泛的客户端。

react 怎么引入阿里字体图标?

$
0
0

请问 react 怎么引入阿里字体图标

github怎么部署静态页面?

$
0
0

百度了半天开通了GitHub pages 但是怎么弄进去的还是README.md文件 请问该怎么弄,才能访问到我部署的build文件?

Torontomddkdkkd

Viewing all 14821 articles
Browse latest View live