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

请问使用RESTful设计API时, 对于批量修改的数据应该怎么设计?

$
0
0

如果修改单个用户信息的api如下: put /api/user/1

{
  "name": "tom",
  "addr": "北京"
}

那么通过直觉去想, 批量修改用户的api应该这样设计: put /api/user

[
  {
    "name": "tom",
    "addr": "北京"
  },
  {
    "name": "Obama",
    "addr": "大连"
  }
]

但是这样设计好像不符合RESTful的url必须是资源的设计, 请问大家是怎么设计的呢? 谢谢!


分享个express+mongoose 快速搭建项目的demo

$
0
0

没事整理一个express+mongoose + bootstrap+ hbs的demo,欢迎大神评阅提意见 GitHub地址

微信商户自动登录用程序模拟好实现么?

$
0
0

背景: 由于微信提供商户平台账户余额的api. 期望:模拟多个微信普通商户登录(数量:3-9个),登录成功后,跳到账户余额页面,抓取页面余额金额。(更新频度30秒) 初步调研:web端登录,需要安装安装证书.dmg, 登录表单不是普通的html input表单。

[武汉][年薪 30w] 招 Node.js/React.js 工程师

$
0
0

之前发了同样的招聘 [武汉][年薪 20w] 招 Node.js 和 React.js 有丰富经验的小伙伴,可能是薪资低了没有招到合适的人,这次老板加钱了。

技术要求

熟悉 Node.js 和 React.js,基础扎实,能够独当一面,带领小团队。

公司简介

武汉唯理科技有限公司是一家基于垂直应用领域的人工智能公司,目前公司的解决方案主要应用于大交通领域、创业孵化等领域。唯理科技依托华中科技大学优势力量,由华中科技大学科技园控股的国家级创新性孵化器、海归校友、前世界500强人员共同创立,公司选址于武汉光谷华工科技园创新基地内。成立之初即获得市场的认可,一年内相继获得多项百万订单,同时公司创始人亦将获得2017年光谷3551创业人才支持,发展势头迅猛。

简历发至 jianghangscu@gmail.com

求助,express+mongoose返回数据给echarts遇到问题

$
0
0
router.get('/chart', function (req, res, next) {
  let department = [];
  stations.aggregate([{$group:{_id:"$dept",count:{$sum:1}}}]).exec((err,doc)=>{
   department.push(doc);
  });
  res.json(department);
});

代码如上,我想查询stations集合里各个部门的数量,push进一个数组然后返回给Echarts的柱状图,可是前端拿到的却是空的数组。通过调试,数据是查到了,可是到了res.json(department)这一步,department数组就变成空的了,请教这个问题该如何解决?

新手项目-漫画阅读器

react内部方法绑定this的另一种可能性。

$
0
0

总所周知,react里面传递方法到子组件里面会有丢失this的风险。具体的解决方法这里不说了,网上都可以查到几种好用方法。 最近在优化直接使用bind方法来绑定的手段。

<div onClick={ this.func.bind(this) }></div>
// 或者简写成
<div onClick={ this::this.func) }></div>

这种做法,会导致每次进入render函数。bind都会生成一个新的方法,造成子组件的更新,被认为是不好的解决办法。 所以我想到,如果bind方法被重复调用时,都会返回同一个方法(把方法缓存起来),那么就可以解决这个问题了。 于是把原型上的bind方法改造了一下:

Function.prototype.bind = function (context, ...args) {
  const self = this
  if (args.length) {
    return function (...innerArgs) {
      return self.apply(context, args.concat(innerArgs))
    }
  }
  if (!this.bindList) this.bindList = new Map()
  if (!this.bindList.has(context)) {
    this.bindList.set(context,
      function (...innerArgs) {
        return self.apply(context, innerArgs)
      }
    )
  }
  return this.bindList.get(context)
}

不知道会不会有未知的风险。

支付宝店铺API 上传图片接口image_content参数怎么传?


通过 proc.kill 关闭一个 yarn 任务, 任务没有关闭成功?

$
0
0

做了个玩具, 用图形界面管理某些开发的进程. 遇到个问题, 我有个任务是用 yarn 启动的, 我在 Node 里用 child_process.exec启动了进程, 然后通过 proc.kill()杀死进程. 结果发现 yarn 当中的任务仍然在执行. 具体这个任务是 yarn 调用了 java 的一个编译器, kill 执行以后, 那个 java 进程依然在运行着. 我试过 nodejs 或者单纯 shell 的进程, 没有遇到问题. 又试了一下去掉 yarn 直接用process.exec调用那个 java, 依然是杀不掉的. 命令行当中 Control C 是可以正常 kill 掉整个任务的 java 进程的. 那么从 proc.kill()杀进程和 Control C 杀进程差别多大? 是不是我需要使用别的方式杀掉进程?

一个支持两种代理的单服务器机场前端

$
0
0

和一些人合租了一台服务器,有的时候会加新人进来,所以为了方便就写了个前端。最开始前端支持某 s,后来想换某 V 之后就加上了某 V 的支持。或许是第一个支持原版某 V 的多用户前端。当然,受 V 的限制,不支持流量纪录。

因为自己用的方案是 WebSocket + TLS,所以针对这种方案的测试最全,其他方案的测试稍微少一些。

开发技术栈是 Node + TypeScript + Koa + TypeORM+React,欢迎 star、PR。

https://github.com/coderfox/clover

部署

推荐使用 Docker。编辑好 docker-compose.ymlss.py就可以用 docker-compose up -d启动。默认的配置是 WebSocket+TLS,前端用 Nginx 分流,TLS 用 letsencrypt 实现。

特性

  • s 和 V 双支持
  • 自动生成 V 配置文件
  • 自动重启 V
  • 公告
  • 邀请注册
  • 较完善的使用说明
  • Docker 支持
  • 用 SendGrid 发送邮件

开发计划

  • 提高测试覆盖率
  • 增加工单系统

使用eoLinker进行API接口自动化测试——高级模式(代码)

$
0
0

eoLinker是目前第一个支持在线API自动化测试的平台,eoLinker AMS提供了两种自动化测试方案: 1.简易模式:全UI界面,无需编写任何代码即可完成稍复杂的API测试工作 2.高级模式:代码界面,通过编写极少的Javascript代码,即可实现强大的API自动化测试 一般而言,自动化测试涉及以下几个方面: 1.自由设定API测试顺序; 2.API之间存在数据关联,比如后面接口的请求参数会绑定前面接口的返回结果等; 3.支持对返回结果进行校验; 4.支持对数据进行处理,比如在测试登录接口时对密码进行加密等; 5.支持高级的代码用例,可以用代码来实现控制测试流程的目的,一般语言有js; 6.eoLinker支持上述提到的所有功能,并且是目前全球唯一一款支持UI界面创建自动化测试的产品,用于自动化测试非常方便,并且用户体验相比于Postman等工具要好许多。 本篇主要用于记录高级(代码)模式的自动化测试。高级自动化测试教程:请点击这里2.jpg

一.单例和用例

单例 是自动化测试下面的一个基本单位,通俗地讲,单例 也就是“单个API的测试条件和结果”。比如有一个用户登录接口,传递abc和123作为请求参数,然后返回”OK”作为成功的结果。  用例 则是多个单例的合集,一个用例可以包含1~无限个的单例,并且把这些 单例 按顺序组合起来。比如测试完整的用户登录流程(注册-登录-判断登录状态-退出登录)。 注意:在高级模式中,单例 将以代码的形式集中在用例 中,因此形式上看并不像简易模式中拥有明显的单例和用例的概念。 我们在用例列表页面,新增用例时选择用例类型为 高级[代码模式] 即可创建一个高级用例: 3.jpg

二.环境变量

和Postman一样,eoLinker也提供了环境变量的功能,帮助用户快速对测试API的环境进行切换,而不需要对API进行修改(比如开发和生产环境的参数和地址可能不同)。 不同的是,eoLinker的环境变量功能要更加强大,除了设置全局变量,eoLinker里面可以设定所有API的地址前缀、请求头部等信息。 在环境管理中创建好环境,在自动化测试的时候就可以根据不同的环境随时切换,非常方便。

三.创建用例

如果你已经在接口管理中把API信息录入完毕,那么在创建单例的时候可以直接将接口文档导入,节约绝大多数的时间。或者我们也可以手动去录入单例的信息。 其中包括: 1.API URL(url) 2.请求方式(method) 3.请求头部(headers) 4.请求参数(params) 5.超时设置(timelimit) 和简易模式不同的是,这些信息都将以Javascript代码的方式呈现出来。但是eoLinker拥有非常简单的API模板规则,因此只需要极少的代码即可完整地描述API信息(红色部分的代码): 4.jpg上图表示的API信息是:  请求url:https://www.eolinker.com  请求方式:POST 请求头部:空 请求参数:form-data类型(默认),name=hello,password=world 超时限制:300毫秒  执行请求后,判断结果是否等于”000000”,如果不等于,则使用eo.stop()输出错误信息并且中止测试,否则使用eo.info()输出提示信息并继续往下测试。 当所有测试均没有遇到eo.stop()以及意外终止(如no response、超时等错误)情况时,会判断为用例测试成功,否则失败。 所有的测试都会在测试结束之后弹出测试报告,方便核查: 5.jpg

eoLinker是一个针对开发人员需求而设计、免费而且开源的API接口管理平台,提供自动生成API文档、API自动化测试、Mock测试、权限管理、团队协作等功能,旨在解决由于前后端分离导致的开发效率低下问题,吸收了Postman以及RAP等接口管理产品的优点,提倡远程办公和敏捷开发,让开发者进行接口管理更加简单。

开源项目:https://www.eolinker.com/#/os/download(一言不合就开源开源开源) Github:https://github.com/eolinker(开发不易,求star啊) 码云:https://gitee.com/eoLinker-API-Management Coding:https://coding.net/u/eolinker/project产品体验官网:https://www.eolinker.com (如果对接口有兴趣的或者工作中可能使用接口的大佬,推荐花几分钟了解一下,开源不易啊)

require 源码问题

$
0
0

基本已经搞懂了这个帖子说的意思了,但是还有一个地方想不太明白。

require()函数是在node/lib/internal/module.jsmakeRequireFunction()定义的,但是在源码最前面就有调用const errors = require('internal/errors');。 那自然是require()已经定义了,我在node/lib/internal/bootstrap_node.js找到了

    const { makeRequireFunction } = NativeModule.require('internal/module');
    // ...
    addCommandLineAPI('require', makeRequireFunction(consoleAPIModule));

但是const { makeRequireFunction } = NativeModule.require('internal/module');中在第一句const errors = require('internal/errors');会因为没有定义require()出错的呀。

把1年前的问题又翻出来问一遍,实在有些抱歉,但是希望能帮我解答一下,const { makeRequireFunction } = NativeModule.require('internal/module');到底是在那里定义的。

web前端三种方式模板渲染和spa单页面吗?

$
0
0

web前端是不是三种方式,一种是模板渲染,类似nodejs里面的res.render一个ejs模板,属于服务器渲染,一种是reactjs这类单页面,属于浏览器渲染,还有就是类似vue服务器同构,就这三种?

我想问下加bootstrap jquery那种就是第一种吧,ejs模板里面加上bootstrap和jquery,还是属于服务端渲染?

看源码,cnode是只用ejs模板其他都没有了的吗?

像其他一些Amaze UI这种和bootstrap一样都是写到类似ejs模板里面用的吧,我理解有没有错

node中要怎么做分布式系统和负载均衡

$
0
0

没做过分布式。比如我有一些业务代码,需要A、B、C三台电脑进行分布式计算。

那是不是我需要每个服务器都安装我的软件,当扩充10台,100台,我都需要每台服务器都安装软件。 哪天软件一升级,100台电脑都需要进行代码更新。感觉这样是不是有点繁琐。这种情况下,一般是如何解决的?

用 express,在 chrome 开发者工具的 request head 和 response head 看不到 cookie

$
0
0

理论上 登录以后可以在开发者工具的 response head 中看到 Set-Cookie:

在 request head 中看到 Cookie:

然而,我用 express 时,虽然可以正常登录和获取cookie,却无法在 request head 和 response head 中看到 cookie:

但是在开发者工具的application中就可以看到:

why?


thunk 是否是柯里化

replace()使用方法求助!

$
0
0

有这样类似的数据 dfsdd234234.jpg dfsdd234234.mp3 dfsdd234234.png … 这些字符串 想用replace()方法一句话得到 ‘.’ 之前的所有字符串

guagua

later定时任务失败

$
0
0
var later = require('later');
later.date.localTime();
var sched = later.parse.recur().on('20:16:00').time();
var t = later.setInterval(() => {
    console.log(Date.now());
}, sched);

我用pm2来管理进程,这代码只能定时一次,比如说今天晚上这个定时会触发,但是明天就不会了。

关于mongoose更新数据问题,请大家指教我该如何更新?

$
0
0

各位大神好,小弟现在有一个更新地址的功能。简单描述下:我在数据库有几个收件地址,但是只有一个是默认地址(字段:isDefault:true),当我修改地址时,假如勾选了“默认地址”,那么我就需要将之前设为默认地址的改为false;
我用的是mongo默认生成的 ‘ id’ 去操作的,因为自己不会动态生成自增的id 我之前的想法是,去查询数据库所有的地址,如果id==我传入的id,则把这条数据的isDefaukt改为true,其他的改为false;但是好像是因为mongo的id问题,并不没卵用,全部改成false了。 后来我们的后端(不会mongodb)说我可以根据id,把需要设为默认地址的改为true,不是这个id的改为false;但是也不行。我觉得应该是我mongose的查询数据出了问题,接触不久请大家指教;附上如下代码 QQ截图20180131165847.png

Viewing all 14821 articles
Browse latest View live