{"data":[{"id":"545aee5a3e1f39344c5b3b3e","author_id":"5283524ed2b3893f2ab0e5a1","tab":"share","content":"
话说已经做了,之前未放出。 同是ionic但针对iOS,不是来捣乱的yo。
\n@callmewhy icon是拿的你的, 稍微做了点修改。「捂脸」
\nhttps://github.com/lanceli/cnodejs-ionic
\n突然发现fir.im的cli工具提供使用resign.tapbeta.com进行企业签名。详见: http://blog.fir.im/2014/fir_cli/\n另外提供了web演示地址,部署在coding.net上。
\nhttps://itunes.apple.com/cn/app/cnodejs-node.js-zhong-wen/id954734793\n
\nhttp://cnodejs-ionic.coding.io/\n
\nhttps://github.com/iojs/iojs-cn/issues/1
\nWelcome, new localizations team :)
\nTo get this team up and running you have a few initial tasks to accomplish:
\nCreate a README.md for this repository, it should include:\nA “call to action” pointing to the Issue tracker for new translators to find tasks.\nA list of the team members.\nInstructions on how to log an issue to be added to this team.\nSet the repository description. This should not be in English, it should be in the language for this community :)\nSocial Media\nCreate a twitter account for this language. Share the password privately with the team.\nCreate accounts on other social media popular in this language. Share the passwords private with the rest of the team.\nMake sure you use these accounts not just to promote newly translated material but also to attract people in your community to help with translation tasks.\nOptional: If you plan to do a Google hangout w/ your localization team have @mikeal add you to the Google+ account so that it can post to the iojs YouTube channel. Once you are added there is documentation on how to setup a hangout-on-air.\nFinally, create a new Issue to translate and publish the latest io.js post. Once translated you should post it wherever you think it will get the most visibility to the community speaking you language, you don’t have to post it to Medium unless you think that it is best.
\n刚开始写node,感觉写出来的代码太丑了,可读性也不强。下面这段代码是一个简单的注册逻辑,用了Promise,希望大神拍砖,给一些风格或者是写法上的建议:
\n register: function(req, res) {\n var sha1 = require('crypto').createHash('sha1');\n var email = req.body.email;\n var password = sha1.update(req.body.password).digest('hex');\n var connect = mysql.connect(__dirname + '/../mysql.json', 'dbname');\n\n var sql = 'into user(email, password) value (?, ?)';\n emailAlreadExists(email).then(function() {\n addUser(email, password)\n .then(function(id) {\n res.send(res.send(lib.genAjaxRet(0, 'success', {id: id})));\n }); \n }, function() {\n res.send(lib.genAjaxRet(10001, lib.s('EMAIL_EXISTS')))\n }); \n }\n
在 JS 里我可以这样做:
\nvar a = 'global a';\nfunction func() {\n var a = 'local a';\n}\n
但是在 Coffee 里则只能:
\na = 'global a';\n\nfunc = ->\n do (a = null) ->\n a = 'local a'\n
为了定义局部变量需要多一层缩进,感觉不是很好。
\n在 JS 里我可以这样:
\nmodule.exports = {\n doXX: doXX,\n doOO: doOO\n};\n\nfunction doXX() {}\nfunction doOO() {}\n
这样在一个文件的开头可以很清晰地看到这个文件都定义了哪些函数,针对使用者的注释也可以都写在最上部,因为用 function 语句定义的函数会被提前到文件最开头,但在 Coffee 里就没办法这样做。
\n\n在终端输入node -v是有显示的。。webstorm也是可以了。。不过在sublime3里就出问题了。。求大神帮忙哈。。
\n\n\n开始本文之前,期待您了解页面与服务器的交互知识,会更容易理解。
\n
某通有个活动,只要每天签到等各种操作就能累积积分,随着等级提升每月可以领到 20M - 300M的流量等。
\n作为码农的你当然不愿意以正常的姿势去完成这些事情,所以你想要程序代替你完成这些事情。((^__^) 嘻嘻……)
\n理想:
\n本文:
\n/app.js
程序入口\n/config.js
账号配置信息等\n/controller/
\nautoCheckIn.js
自动签到等任务\nsendEmail.js
发送邮件\ntask.js
定时任务
module.exports = {\n // 某通账户\n "accounts": [\n {\n "user": 15500000000,\n "password": 123456\n },\n {\n "user": 15500000001,\n "password": 123456\n }\n ],\n\n // 邮件账户\n "email": {\n "host": 'smtp.163.com',\n "user": 'xxx@163.com',\n "password": 123456,\n "toUser": 'xxx@qq.com'\n }\n};\n
这里没什么特别的,通过 nodemailer
模块代理发送邮件。
var email = require('../config.js').email;\nvar nodemailer = require('nodemailer');\n\nvar transporter = nodemailer.createTransport({\n host: email.host,\n secureConnection: true, // use SSL\n auth: {\n user: email.user,\n pass: email.password\n }\n});\n\n/**\n * 发送邮件\n * @param contents\n */\nmodule.exports = function (contents) {\n transporter.sendMail({\n from: email.user,\n to: email.toUser,\n subject: 'checkIn success!',\n text: contents || 'is test!'\n }, function (error, response) {\n if (error) {\n console.log(error);\n } else {\n console.log("Message sent: " + response.response);\n }\n\n transporter.close(); // 如果没用,关闭连接池\n });\n};\n\n
在模拟登录前,你通过抓包工具来收集登录所需的数据。
\n.redirects(0)
,防止页面被转向。var request = require('superagent');\nvar sendEmail = require('./sendEmail');\n\nvar headers = {\n Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',\n Origin: 'http://wap.17wo.cn',\n 'X-FirePHP-Version': '0.0.6',\n 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36',\n 'Content-Type': 'application/x-www-form-urlencoded',\n DNT: 1,\n Referer: 'http://wap.17wo.cn/Login.action',\n 'Accept-Encoding': 'gzip, deflate',\n 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4,sr;q=0.2'\n};\n\nvar origin = 'http://17wo.cn',\n urls = {\n login: origin + '/Login!process.action',\n checkIn: origin + '/SignIn.action?checkIn=true'\n };\n\n\n/**\n * 自动签到\n * @param account {object}\n * @constructor\n */\nfunction AutoCheckIn(account) {\n this.account = account;\n\n this.cookie = {\n value: null,\n expires: null\n };\n\n this.init();\n}\n\nAutoCheckIn.prototype = {\n constructor: AutoCheckIn,\n\n init: function () {\n var that = this;\n\n that.checkIn(function () {\n sendEmail(that.account.user + ',签到完毕。 ' + new Date());\n console.log('======', '签到完毕,' + that.account.user, '======');\n });\n },\n\n // 验证登录,如果凭证没过期,无需重新验证\n _verify: function (cb) {\n Date.now() > this.cookie.expires ? this._login(cb) : cb(this.cookie);\n },\n\n // 登录\n _login: function (cb) {\n var that = this;\n\n request\n .post(urls.login)\n .set(headers)\n .type('form')\n .send({\n backurl: null,\n backurl2: null,\n chk: null,\n chkType: 'on',\n loginType: 0,\n mobile: that.account.user,\n password: that.account.password\n })\n .redirects(0) // 防止页面重定向\n .end(function (result) {\n var cookie = result.headers['set-cookie'];\n that.cookie = {\n value: cookie,\n expires: cookie.join().match(/Expires=(.*);/)[1]\n };\n\n cb(that.cookie);\n });\n },\n\n // 签到\n checkIn: function (cb) {\n var that = this;\n\n that._verify(function (cookie) {\n request\n .get(urls.checkIn)\n .set(headers)\n .set('Cookie', cookie.value)\n .end(cb);\n });\n }\n};\n\n\nmodule.exports = function (account) {\n return new AutoCheckIn(account);\n};\n\n
包装定时任务,方便调用。
\nvar later = require('later');\n\n/**\n * 定时任务\n * @param time 参考later的base time\n * @param intervalFn 定时执行的函数\n */\nmodule.exports = function (time, intervalFn) {\n var sched = {schedules: [time]};\n \n // 设定为本地时间\n later.date.localTime(); \n later.setInterval(intervalFn, sched);\n};\n
var accounts = require('./config').accounts;\nvar task = require('./controller/task');\nvar autoCheckIn = require('./controller/autoCheckIn');\n\n// 定时执行\ntask({h: [18], m: [0]}, function () {\n accounts.forEach(function (v) {\n autoCheckIn(v);\n });\n});\n\nconsole.log('======', '自动签到服务运行中..', '======');\n\n
到此简单几步已实现了想要的核心功能,很好玩,充满了想象…
\n\n\n本文重点在于分享思路,略过了大量细节,无源代码,所需的内容均在在本文中 :)
\n
\n\n技术: node.js+很多模块
\n时间: 2015年02月
\n博客: think2011
\n
2014,互联网物流元年。
\n云物流希望用互联网的方式和用户体验,创造一款全新的货运调车配货产品,改良货运交易O2O模式,促进物流运输业向互联网化转型。
\n云物流核心团队由互联网、IT及物流行业资深人士组成,来自金蝶、网易、Infosys等知名公司。产品已在客户与台塑、三星等项目中对接使用。
\n我们提供开放、创新、团结、激情的创业氛围与机遇。
\n加入我们,体验物流行业与互联网碰撞中擦出的精彩火花,做出市场真正期待的颠覆式产品和商业模式。
\n云物流助手产品主页: http://yun56.co .
\n2014年是物流元年,加入我们,一起踏上改变行业的征程吧!
\nnodejs开发工程师
\n岗位职责:\n1、负责web页面的开发;\n1、负责nodejs后端开发;\n2、负责项目模块的设计、编码、测试及bug处理;\n3、负责配合移动客户端进行编码开发。
\n能力要求:\n1、需要你熟练使用JavaScript,1年以上工作经验;\n2、熟悉nodejs,并可以独立开发nodejs module;\n3、熟练使用git进行代码托管;\n4、熟悉或了解CoffeeScript,python,ruby,shell其中一种或几种语言优先;\n5、有服务器运帷经验者优先。
\n我们的办公地点在杭州滨江区六合天寓,我们提供有竞争力的薪酬,宽松的工作氛围。当然,作为创业公司,我们同时提供股票期权相关的激励政策。
\n欢迎发送简历至: kurten.chan @ qeemo.me. 请注明来自 cnodejs 社区.
\n坐标:\n北京三元桥\n薪资:10K–15K ,股票期权 其他:五险一金、餐补、无限零食饮料、弹性工作等
\n公司:\n专注互联网招聘的创业公司,去年已经拿到千万投资,目前正在发展壮大中
\n岗位职责:\n1、负责nodejs后端开发;\n2、负责项目的设计、编码、测试及bug处理;\n3、负责配合移动客户端进行编码开发。
\n能力要求:\n1、需要你熟练使用JavaScript,1年以上工作经验;\n2、熟悉nodejs、熟悉mongodb,有独立开发项目经验;\n3、熟练使用github进行代码托管,有独立学习能力;
\n跪求小伙伴入伙,联系邮箱:bin.he@91talent.com
\n时速云是一家由3位工程师于2014年10月份创立的团队,我们致力于提供高价值的云计算服务,目前时速云\n移动应用开发云服务已正式上线 ,https://www.tenxcloud.com 未来我们还将提供诸如数据库等云服务。
\n时速云有国内首个MVC一体的移动应用开发云服务。所谓MVC一体,是将应用程序的数据层(Model)、视图层(View)以及控制层(Control)完全在云端完成。时速云由Docker container容器驱动,我们为每一个用户建立私有Runtime和私有数据库,保障平台的安全性。
\n公司产品:时速云 https://www.tenxcloud.com\n公司名称:北京云思畅想科技有限公司\n公司地址:北京市海淀区西二旗辉煌国际大厦6号楼东
\nNode.js工程师\n薪资范围\n8k ~ 15k (另加股权,五险一金等)
\n职责描述
\n职位要求
\n前端开发工程师\n岗位职责
\n任职要求
\n公司地址:北京市朝阳区望京SOHO\n公司名称:北京众赢数字科技有限公司
\n基本要求:\n1、熟悉 Javascript 和 NodeJS;\n2、了解 MySQL、MongoDB;\n3、了解模块化编程和敏捷开发;\n4、具备独立解决问题的能力;\n5、善于沟通和协作。
\n联系邮箱:\nhr@crowd-win.com
\n\n据说原来有个app.error\n现在被deprecated了\n整个人都迷了
\n招 聘 网上QQ面试: 1347653\nWeb前端工程师
\n北京龙旗广场 经验1-3年 学历不限 全职 待遇面谈 职位诱惑:做到A轮股东名单里一定有你\n职位描述: 配合产品、交互及技术,开发优秀用户体验的互联网旅游产品,传递产品价值;\n配合技术负责人进行前端技术规划及架构;\n根据产品设计,开发PC端及移动端HTML/HTML5功能页面;\n研究及开发前端Web工程工具,加速产品开发,优化代码部署;\n配合服务器端开发人员进行应用及系统整合;\n负责相关技术文档编写\n岗位要求: 两年以上互联网公司Web前端开发经验;\nHTML、CSS以及Javascript熟练掌握且技能均衡(无弱项);\n对前端各种技术和工具有积累、钻研和自己的思考;\n熟悉主流的Javascript 及CSS库和框架,例如jQuery、Zaptojs及Bootstrap等;\n了解前端MV**技术,有Backbone,Angular经验者优先;\n了解响应式设计,有移动Web App或Hybrid App开发经验优先;
网上QQ面试: 1347653
\nNode.js 研发工程师 \n北京龙旗广场 经验1-3年 学历不限 全职 待遇面谈 诱惑:做到互联网创业公司的股东\n岗位职责: 参与互联网旅游产品的功能设计与开发,打造高性能互联网产品;\n配合产品经理进行产品实现,捕捉用户需求,创造极致用户体验;\n配合运营经理通过数据采集、功能改良和创新,实现运营目标;\n关注互联网产品的技术发展与变化,不断学习、融入与创新;\n职位要求: 计算机相关专业本科以上学历;\n两年以上互联网应用系统分析、设计、开发经验,有旅游或电商产品开发经验者优先;\n有互联网Web系统开发、部署和调优方面的实战经验,有微信公共号开发经验者优先;\n熟练使用Nodejs进行服务端开发,有Java或Python经验者优先;\n熟悉Javascript/HTML5/CSS/jQuery等前端开发技术,有Backbonejs等单页应用框架经验者优先;\n熟悉MySQL和Redis,有Nginx使用经验;\n会沟通,有责任心,喜欢挑战和创新;
\n北京中景合天科技有限公司:\n中景合天是一家专注于旅游C2C的移动互联网创业公司,目标市场是为您提供个性化的旅游产品为己任,帮您完成自助游、互助游,组团游、品团游多种旅游形势,以您想要得方式提供给您最惬意的出行选择。目前融资阶段是天使轮。公司的创始人来自知名铁路服务企业,核心团队来自成熟互联网创业团队。公司奉行创新和拼搏的价值观,实行扁平化团队管理,团队风格为谦逊与尊重!
\n公司地址:北京市昌平区回龙观镇黄平路19号院4号楼龙旗广场E座1308室\n电子邮件: liujianguo@easyway.net.cn 电话:82694735, 欢迎加 QQ, 网上QQ面试: 1347653
\n公司简介
\n十多年前,合得国际率先将商战模拟开发的鼻祖——欧洲工商管理学院(INSEAD)的商战模拟引入中国,并且在2009年,合得国际并购了为欧洲工商管理学院(INSEAD)开发电脑商战模拟的核心技术团队,不断推出全球唯一针对新兴市场的商战模拟游戏。如“营销在线”MarkSimos,“耐消风云”CasaSimos,“零售风暴”eTales等。合得国际同时也在研发系列针对行业的其他相关商战模拟游戏, 例如B2B行业、银行业、烟草业、医药、汽车等行业特设模拟课程
\n产品介绍:\nMarksimos / Etales 在线模式零售电商实战模拟游戏\nChangeMan / LeaderStyle 变革管理/ 领导力风格培训
\n官网 http://www.hcdlearning.com/cn/
\n办公室环境图片\nhttp://ww2.sinaimg.cn/mw690/87992fe6gw1ee3ra1xpz9j20ih0ppthu.jpg
\n入职会提供MacBook Pro一台\n联系邮箱 jinwang@hcdlearning.com weibo.com/jinwyp
\n薪资15K-25K
\n网站前端开发工程师
\n合得教育正在寻找一位精于搭建用户界面的前端网站开发工程式。
\n我们在技术平台中运用了MEAN Stack新技术,包括AngularJS, NodeJS, MongoDB, Socket.io 等等。 你不需要了解以上所有,我们需要的是天资卓越的工程师,能快速掌握所需工具,并和我们一同充满热情地编写代码,帮助客户收获变革性的体验式学习经验。 我们热烈欢迎愿意在将来成为全栈程序员的员工。
\n我们将提供有竞争力的薪资待遇和福利,并配备设施齐全、现代舒适的工作环境。 如果你需要,我们还专程为程序员们提供MacBook以及24英寸的外接显示器,你也可以携带自己的电脑来办公场所。 为程序员,如果你的自我管理能力得到团队的认可,也可以在家中办公。
\n合得教育拥有跨文化团队合作分为,我们的成员来自韩国、印度、波兰以及中国。 在这里,你将有机会和来自不同国家及文化的精英一同工作。
\n有机会接触上海最完整的angularjs项目。
\n核心工作职能:
\n技能要求:
\n加分技能:
\nNodeJS 后端开发工程师
\n核心工作职能:
\n技能要求:
\n加分技能:
\niOS Developer Requirement:
\nAndroid Developer Requirement:
\n1 熟悉Android开发技术,如UI,网络编程,多线程,性能优化等;\n2 精通java语言,熟悉android SDK,深刻理解Android的运行机制;\n3 熟悉Unit3D 框架或Cocos2d 框架或其他游戏框架优先
\n1 Familiar with Android SDK, UI, net protocol programming, multi thread programming\n2 Familiar with JAVA, Object-oriented programming. Skilled with Android Runtime.\n3 Better with Game Framework Unit3D or Cocos2d or others.
\n想早日买房的童鞋看过来!
\n初创团队,薪资的区间在 12k - 20k 之间,A 轮后继续提升,全力保障程序员的幸福感和贴身利益。
\n目前 base 杭州,入职后可选择一个月到美国硅谷度假式办公,费用公司全包,无论是游名校,还是逛湾区,有专职司机加翻译接送
\n不久将来,业务推广到其他国家时候,研发团队拉到硅谷全职办公(H1B 签证),但不强制去硅谷,可以继续留守杭州 remote
\n我最近在硅谷办公,想了解华人程序员的生活请前往 硅谷所见所闻
\n创业公司大家知道工作不轻松,但是也要想尽办法轻松,每周可选择一天在家办公,同时遇到恶劣天气(台风,下雪,大雨,PM 过高、重大庆祝活动导致堵车)均可呆在家里,怎么爽怎么来。
\n现在是 A 轮前夕,加入的黄金时期,30 岁以前的年轻程序员尤其值得关注,大翻身在此一举!
\n唯一一个程序员实习妹子(其他妹子到帖子底部),求调教:
\n\n但是,我不鼓励你上来就投简历:
\n杭州滨江海创园区\n在六和路附近,我住在余杭,距离这里也很远,选它是因为我们拿下杭州 5050 海归创业的 300 万奖金,政府同时扶持了这个办公场地,不用可惜了
\n如果你看到这里,也许你的技术是完全超过预期的,我们聊下这个项目,看走不走心。
\nMoveha 是一个帮助国际学生远程租房的平台,帮助国际学生在来美国之前把房子预定下来,也面向所有需要校外租房的美国本土学生群体。
\n此外,Moveha 还综合各方面资源,提供了机票预定(StudentUniverse)、接机(LYFT)、家具租赁(cort)、手机卡办理(T-Mobile)、一对一定制服务(Premium Service)等多项附加服务,来保障留学生来美后能够省去繁文缛节,轻松入住新家(留学过的人都知道租房这个过程有多痛)。
\n目前,Moveha 已经获得 240多万元天使投资,和上面提到的 300 万人民币海创大赛基金,以及杭州市政府提供的免费办公场地。公司总部位于美国加州硅谷腹地,房源目前覆盖到加州、新泽西、宾夕法尼亚等州,和芝加哥、西雅图等大型城市,正在向全美留学生集中的学校扩张。同时已经和美国 100 多所大学、几十家房屋中介机构、以及国内几十家留学中介、英语培训学校建立合作关系。
\n正式员工我们有 7 个左右,以及 10 个左右的实习生(还没毕业的女学生)
\n准确的说,全职的开发只有我一个,前端的 HTML 要写,后端的 Mongodb 要做,所以,我是自己一个人的 CTO。
\n首先,在没有正式 A 轮以前,投资人的每一分钱我们都花很慎重\n其次,跟业务有关,在初创的前期,很多业务需要不断的迭代和验证(上和下),这种不确定性导致越早进来的人所承担的失败风险越大,我们不希望过早把这种风险转移给工程师,这也是我们为何保持慢增长的原因,无论是用户还是成交。
\n不过,我会打击你的士气,如下是我认为公司不完善/不确定/不好的地方:
\n我还可以想更多缺点出来,比如没有大公司学习氛围浓,各种学习资源不足啊等等。至于其他好的方面,我不会告诉你,需要你来悟,或者到了团队后慢慢体会。
\n所以,我不鼓励你看完这个帖就投简历,我希望你先想两天,如果有女朋友的话,先商量一下,因为这个决定很可能改变的是你的人生轨迹,而不单单是在国内的 BAT 公司跳来跳去,城市搬来搬去。另外,我希望你对技术是有很大的热情和兴趣,对这个项目有足够的好感(认同感是随着投入慢慢起来的),否则做起来你万一不开心呢。
\n哦,BTW 一句,我现在正在带一个 高校的教授(Are you kidding?),他那种技术热情足以感染任何一个身边的人,全靠自学,希望做一个全栈工程师。
\n来看看团队的小伙伴吧:
\n\n『那一天,人类终于回想起了曾一度被没有前端的日子所支配的恐怖。』
\n——《进击的花瓣网》
\n花瓣前端团队需要你。
\n只需要你:
\n下面的小伙伴优先考虑哈:
\n加入自由之翼军团的小伙伴们将:
\n在花瓣的小伙伴们都非常的 Geek,技术也走在互联网前沿,是国内最早使用 Node.js 的公司之一。
\n工作地点:杭州市西湖区西斗门路 9 号福地创业园二期 4 号楼
\n花瓣: http://huaban.com/ (别说不知道哦,会桑心的
\n有兴趣的可以发简历过来哈:i(at)2333.moe
\nhttps://github.com/bitinn/svgshelf
\n2015年,别再依赖font icon了,用svg icon吧。如果你用过svgstore,这个功能仿照他们设计,只是没有gulp或grunt的依赖,并基于iojs开发(兼容node.js,不过要–harmony)。
\n为什么svg icon见此两文,不是什么新概念了,用法也愈来越多。
\n\nhappycasts.net 里有一集是实现一个多人协同编辑的 挺有意思的
\n读教程时看到在服务器端响应post请求的时候,文章里用触发data和end事件去处理数据流,用req.addListener实现对事件的侦听,代码如下:\n\n但是读Node API的时候看到了官网上用req.on()实现了同样的功能,代码如下:\n
\n问题:
\n2.如何在API里查看req和res这两个对象的成员属性和方法?我没找到在哪里…(请勿吐槽,新手见谅)
\nset number\ncolo desert\nsyntax on\nset autoindent
\n刚开始弄,比较简单,呵呵
\n否则每次打开页面,都要编译一次coffee片段,性能会比较差吧:(
\n编译环境
\n\n\nCnetOS 7\nNDKr10d\nPython 2.7.9
\n
存在问题
\n\n\nAndroid 5.0 PIE安全机制原因,编译的时候不知道怎么加入flag,导致5.0及以上android设备会出现
\nerror: only position independent executables (pie) are supported.
二进制下载地址(ARM)
\n\n\n\n
##项目地址\ngithub: https://github.com/wszgxa/tra
\n首先,说说为什么做这么个东东。请看图:
\n\n这事我平常看英文资料时候的状态,没办法英语没学好,得开个浏览器来个百度翻译。屏幕被占那么多,看着就不爽啊。** 昨天下午的时候实在忍不了。 **然后就想能不能做个sheel的工具能不能直接在sheel上翻译,记得(七天学会nodejs)[https://github.com/nqdeng/7-days-nodejs]上有讲,重新看了看,然后又去看了看百度翻译的api,可行。然后忙活一晚上(新手,效率是有些低。。。)搞好了,请看图:
\n\n终端还是半透明,顿时神清气爽。
\n然后今天早上忙活了一早上。。。又把它在npm上发布了。
\n首先安装,只能全局安装。由于需要系统命令,我拿人头保证。。。没有毒。\nsudo npm install -g tra
\n使用就很简单了tra +单词
就行了\n然后tra -h
一个简单的帮助文档tra -v
查看版本。
最后感谢回答我在论坛提问的小伙伴=。=
\njavaScript – 目录最火热的语言,到处发着光芒, html5, hybrid apps, node.js, full-stack 等等。javaScript 从一个仅仅在浏览器上面的一个玩具语言,一转眼演变成无所不能神一般的存在。但是,由于天生存在着一点戏剧性(javaScript 据传说是在飞机上几天时间设计出来的),模块系统作为一门语言最基本的属性却是javaScript所缺的。\n让我们回到过去,通过 <script>
标签来编写管理 js 脚本的年代也历历在目,翻看现在的许多项目,还是能找到这样子的痕迹,但是随着项目规模的不断增长,js文件越来越多,需求的不断变更,让维护的程序员们越来越力不从心,怎么破?
2009 ~ 2010 年间,CommonJS 社区大牛云集,稍微了解点历史的同学都清楚,在同时间出现了 nodejs,一下子让 javaScript 摇身一变,有了新的用武之地,同时在nodejs推动下的 CommonJS 模块系统也是逐渐深入人心。\n1:通过 require 就可以引入一个 module,一个module通过 exports 来导出对外暴露的属性接口,在一个module里面没有通过 exports 暴露出来的变量都是相对于module私有的
\n2:module 的查找也有一定的策略,通过统一的 package.json
来进行 module 的依赖关系配置,require一个module只需要require package.json里面定义的name即可
同时,nodejs也定义了一些系统内置的module方便进行开发,比如简单的http server
\nvar http = require('http');\nhttp.createServer(function (req, res) {\n res.writeHead(200, {'Content-Type': 'text/plain'});\n res.end('Hello World\\n');\n}).listen(1337, '127.0.0.1');\nconsole.log('Server running at http://127.0.0.1:1337/');\n
CommonJS 在nodejs带领下,风声水起,声明大噪,CommonJS 社区大牛们也就逐渐思考能否把在nodejs的这一套推向浏览器?
\n理想很丰满,但是现实却是不尽如人意的
\n一个最大的问题就是在浏览器加载脚本天生不支持同步的加载,无法通过文件I/O同步的require加载一个js脚本
\nSo what ? CommonJS 中逐渐分裂出了 AMD,这个在浏览器环境有很好支持的module规范,其中最有代表性的实现则是 requirejs
正如 AMD 介绍的那样:\nThe Asynchronous Module Definition (AMD) API specifies a mechanism for defining modules such that the module and its dependencies can be asynchfanronously loaded. This is particularly well suited for the browser environment where synchronous loading of modules incurs performance, usability, debugging, and cross-domain access problems.
\n翻译过来就是说:异步模块规范 API 定义了一种模块机制,这种机制下,模块和它的依赖可以异步的加载。这个非常适合于浏览器环境,因为同步的加载模块会对性能,可用性,debug调试,跨域访问产生问题。
\n确实,在浏览器环境下,AMD有着自己独特的优势:
\n由于源码和浏览器加载的一致,所见即所得,代码编写和debug非常方便。尤其是在多页面的web项目下,不同页面的脚本js都是根据依赖关系异步按需加载的,不用手动处理每个页面加载js脚本的情况。
但是,AMD 有一个不得不承认的作为一个module system的不足之处
\n请问?在 AMD(requireJS)里面怎么使用一个第三方库的?
一般都会经历这么几个步骤:
\n一个库就需要问这么些个问题,而且都是人工手动的操作
\n最最关键的问题是你辛辛苦苦搞定的配置项都是相对于你当前项目的
\n当你想用在其他项目或者是单元测试,那么OK,你还得修改一下
\n因为,你相对的是当前项目的根路径,一旦根路径发生改变,一切都发生了变化
requireJS 使用之前必须配置,同时该配置很难重用
\n相比较于 CommonJS 里面如果要使用一个第三方库的话,仅仅只需要在 package.json 里面配置一下 库名和版本号,然后npm install一下之后就可以直接 require 使用的方式,AMD 的处理简直弱爆了 !!!
\n对于 AMD 的这个不足之处,又有社区大神提出了可以在 browser 运行的 CommonJS 的方式,并且通过模块定义配置文件,可以很好的进行模块复用
\n比较知名的就有 substack 的 browserify, tj 曾主导的 component,还有后来的 duo,webpack,时代就转眼进入了 browser 上的 CommonJS
由于 CommonJS 的 require 是同步的,在 require 处需要阻塞,这个在浏览器上并没有很好的支持(浏览器只能异步加载脚本,并没有同步的文件I/O),CommonJS 要在 browser 上直接使用则必须有一个 build 的过程,在这个 build 的过程里进行依赖关系的解析与做好映射。这里有一个典型的实现就是 substack 的 browserify。
\nbrowserify 在 github 上的 README.md 解释是:
\nrequire('modules')
in the browser
Use a node-style require()
to organize your browser code\nand load modules installed by npm.
browserify will recursively analyze all the require()
calls in your app in\norder to build a bundle you can serve up to the browser in a single <script>
\ntag.
在 browserify 里可以编写 nodejs 一样的代码(即CommonJS以及使用package.json进行module管理),browserify 会递归的解析依赖关系,并把这些依赖的文件全部build成一个bundle文件,在browser端使用则直接用 <script>
tag 引入这个 bundle 文件即可
browserify 有几个特性:
\n为了能让browser直接使用nodejs上的module,browserify 内置了一些 nodejs module 的 browser shim 版本
\n比如:assert,buffer,crypto,http,os,path等等,具体见browserify builtins
这样子,browserify就解决了:
\ncomponent 通过 component.json 来进行依赖描述,它的库管理是基于 github repo的形式,由于进行了显示的配置依赖,它并不需要对源码进行 require 关系解析,但是时刻需要编写 component.json 也使得开发者非常的痛苦,开发者更希望 code over configuration 的形式
\n所以有了 duo,duo 官网上介绍的是:
\nDuo is a next-generation package manager that blends the best ideas from Component, Browserify and Go to make organizing and writing front-end code quick and painless.
\nDuo 有几个特点:
\nvar uid = require('matthewmueller/uid');\nvar fmt = require('yields/fmt');\n\nvar msg = fmt('Your unique ID is %s!', uid());\nwindow.alert(msg);\n
webpack takes modules with dependencies and generates static assets representing those modules.
\nwebpack 是一个 module bundler 即模块打包工具,它支持 CommonJS,AMD的module形式,同时还支持 code splittling,css 等
\n最近 browserify 和 webpack 也有一定的比较,可以看看 substack 的文章 browserify for webpack users
\n这些 browser 上的 CommonJS 解决方案都有一个共同的问题,就是无法避免的需要一个 build 过程,这个过程虽然可以通过 watch task 来进行自动化,但是还是edit和debug还是非常不方便的
\n试想着,你在进行debug,你设置了一个debugger,然后单步调试,调试调试着跳到了另外一个文件中,然后由于是一个bundle大文件,你在浏览器开发者工具看到的永远都是同一个文件,然后你发现了问题所在,回头去改源码,还得先找到当前所在行与源码的对应关系!当然这个可以通过 source map 技术来进行解决,但是相比较 AMD 那种所见即所得的开发模式还是有一定差距
\n同时,需要build的过程也给多页面应用开发带来了很多麻烦,每个页面都要配置 watch task,都要配置 source map 之类的,而且build过程如果一旦出现了build error,开发者还要去看看命令行里面的日志,除非使用 beefy 这种可以把命令行里面的日志输出到浏览器console,否则不知道情况的开发者就会一脸迷茫
\n这永远是一个话题,因为谁也无法很好的取代谁,尤其在浏览器环境里面,两者都有自己的优点和缺点
\nCommonJS
AMD
\n前面提到的 javaScript 依赖管理的方式,其实都是实现了同一种设计模式,service locator 或者说是 dependency lookup:
\n通过显示的
调用 require(id) 来向 service locator 提供方请求依赖的 module
\nid 可以是路径,url,特殊含义的字符串(duo 中的github repo)等等
相反,dependency injection 则并没有显示的
调用,而仅仅通过一种与 container 的约定描述来表达需要某个依赖,然后由 container 自动完成依赖的注入,这样,其实是完成了 IoC(Inversion of control 控制反转)
service locator 和 dependency injection 并没有谁一定优于谁一说,要看具体使用场景,尤其是 javaScript 这种天生动态且是first-class的语言里, 可以简单的对比下:
\n相反,dependency injection 由于并没有显示的调用container某个api,而是通过与container之间的某个约定来进行描述依赖,container再自动完成注入,相比较 service locator 则会隐晦一点
\nservice locator 由于可以自己控制,使用起来更加的灵活,所依赖的也可以多样,不仅仅限于javaScript(还可以是json等,具体要看service locator实现)
\ndependency injection 则没有那么的灵活,一般的container实现都是基于某个特定的module,比如最简单的class,注入的一般都是该module所约定好的,比如class的instance
service locator 中的id实现一般基于文件系统或者其它标识,可以是相对路径或者绝对路径或者url,这个其实就带来了一定的限制性,依赖方必须要在该id描述下一直有效,如果依赖方比如改了个名字或者移动了目录结构,那么所有被依赖方则必须做出改动
\ndependency injection 中虽然也有id,但是该id是module的全局自定义唯一id,这个id与文件系统则并没有直接的关系,无论外部环境如何变,由于module的id是硬编码的,container都能很好的处理
\ndependency injection 由于天生是基于id描述的形式,控制交由container来完成,松散耦合,当应用规模不断增长的时候还能持续带来不错的维护性
\ndependency injection 则实现不多,而且由于是与container之间的约定,不同container之间的实现不同,也无法共通
\n其实,比较来比较去,不如两者结合起来使用,都有各自的优缺点:
\ndependency injection 来编写松散耦合的应用层逻辑,service locator来使用第三方库
一个优秀的dependency injection container需要有下面这些特性:
\n这其实就是 bearcat 所做的事儿
\nbearcat 并不是实现了 service locator 模式的module system,它实现了 dependency injection container,因此bearcat可以很好的与上面提到的各种CommonJS或者AMD结合使用,结合自己的优势来编写弹性、持续可维护的系统(应用)
bearcat 的一个理念可以用下面一句话来描述:
\nMagic, self-described javaScript objects build up elastic, maintainable front-backend javaScript applications
\nbearcat 所倡导的就是使用简单、自描述的javaScript对象来构建弹性、可维护的前后端javaScript应用
当然可能有人会说,javaScript里面不仅仅是对象,还可以函数式、元编程什么的,其实也是要看应用场景的,bearcat更适合的场景是一个多人协作的、需要持续维护的系统(应用),如果是快速开发的脚本、工具、库,那么则该怎么简单、怎么方便,就怎么来
\n假如有一个应用,需要有一辆car,同时car必须要有engine才能发动,那么car就依赖了engine,在bearcat的 dependency injection container 下,仅仅如下编写代码即可:
\ncar.js
\nvar Car = function() {\n this.$id = "car";\n this.$engine = null;\n}\n \nCar.prototype.run = function() { \n this.$engine.run(); \n console.log('run car...');\n}\n \nbearcat.module(Car, typeof module !== 'undefined' ? module : {});\n
engine.js
\nvar Engine = function() {\n this.$id = "engine";\n}\n \nEngine.prototype.run = function() {\n console.log('run engine...');\n}\n \nbearcat.module(Engine, typeof module !== 'undefined' ? module : {});\n
this.$id
来定义该module在bearcat container里的全局唯一id$Id
属性来描述依赖,在car里就描述了需要id为 engine的一个依赖typeof module !== 'undefined' ? module : {}
启动bearcat容器,整体跑起来
\n浏览器环境
\n<script src="./lib/bearcat.js"></script>\n<script src="./bearcat-bootstrap.js"></script>\n<script type="text/javascript">\nbearcat.createApp(); // create app to init \nbearcat.use(['car']); // javaScript objects needed to be used\nbearcat.start(function() {\n // when this callback invoked, everything is ready\n var car = bearcat.getBean('car');\n car.run(); \n});\n
bearcat.use(['car'])
表面当前页面需要使用 car,bearcat然后就会加载car.js,然后解析car里面的依赖,知道需要engine,然后加载engine.js脚本,加载完之后,再把engine实例化注入到car中,最后调用bearcat.start
的回调完成整个容器的启动
nodejs 环境
\nvar bearcat = require('bearcat');\nvar contextPath = require.resolve('./context.json');\nglobal.bearcat = bearcat; // make bearcat global, for `bearcat.module()`\nbearcat.createApp([contextPath]);\nbearcat.start(function() {\n var car = bearcat.getBean('car'); // get car\n car.run(); // call the method\n});\n
nodejs 环境下启动,则不需用bearcat.use
了,直接把 context.json
的路径传递给bearcat即可,bearcat会扫描context.json
里面配置着的扫描路径,该路径下的所有js文件都会被扫描,合理的module都会注册到bearcat中,然后实例化,注入
完整源码 10-secondes-example
\nbearcat 的简洁,异步加载的module,无需打包,所见即所得,在编写应用层代码上有非常大的便利
\nbrowserify 可以直接复用 npm 上的 module,使用第三方库非常的方便
bearcat + browserify 会是一个不错的组合
\n一个例子,基于 bearcat + browserify 的 markdwon-editor
\nbearcat 与 browserify 之间通过一个requireUtil
(比如)的module来进行连接
在这个 requireUtil
可以使用 browserify 的 require,用这个 require 来引入第三方库,比如marked库
requireUtil.js
\nvar RequireUtil = function() {\n this.$id = "requireUtil";\n this.$init = "init";\n this.brace = null;\n this.marked = null;\n}\n \nRequireUtil.prototype.init = function() {\n this.brace = require('brace');\n this.marked = require('marked');\n}\n \nbearcat.module(RequireUtil, typeof module !== 'undefined' ? module : {});\n
然后在你的业务层代码上,注入这个 requireUtil
来使用 browserify 引入的第三方库
markDownController.js
\nvar MarkDownController = function() {\n this.$id = "markDownController";\n this.$requireUtil = null; // requireUtil is ready for you to use\n}\n \nMarkDownController.prototype.initBrace = function(md) {\n var ace = this.$requireUtil.brace;\n var editor = ace.edit('editor');\n editor.getSession().setMode('ace/mode/markdown');\n editor.setTheme('ace/theme/monokai');\n editor.setValue(md);\n editor.clearSelection();\n return editor;\n}\n \nbearcat.module(MarkDownController, typeof module !== 'undefined' ? module : {});\n
这样子一来,编写业务层代码由于是bearcat管理的,javaScript依赖异步加载,代码编写和debug就和AMD一样,所见即所得,设置断点什么的,再也不用担心找不到源文件(或者需要source map)
\n使用 browserify 仅仅是为了用它来引入第三方库,且也仅仅当引入一个新的第三方库的时候才会执行一下 browserify 的 build
bearcat 和 browserify 的优势就都发挥了出来,提高了开发的效率以及可维护性
\nbearcat-markdown-editor 官网例子地址 markdown-editor
\n无论是CommonJS、AMD或者是dependency injection,单独使用某一个,javaScript依赖管理都不是完美的
\n应人而异,各取所需
Node.js 的 exports 和 module.exports 两者很容易给新手造成疑惑。这里希望能讲清楚它们的异同。
\nexports 和 module.exports 并不是全局变量,而只是对各自的 module 可见。
\n它们指向同一个对象,其缺省初始值为空 {}。
\n如果 exports 和 module.exports 没有被重新赋值,这个对象就是将要输出的对象。
\nmodule 是对当前模块的一个引用。真正输出的是 module.exports。
\n所以对 exports 直接赋值没有作用。而对 module.exports 直接赋值后,module.exports 就指向新的对象了,这个新的对象成为将要被输出的对象。
\nexports 和 module.exports 指向的是同一个对象,所以给他们任何一个添加属性或方法,另外一个都会接收到变化,因为他们指向的是同一个对象。例如:
\nexports.afunc = function(){};\nmodule.exports.name = "Wang";\nconsole.log(exports);\nconsole.log(module.exports);\n
后面两条语句的输出都是: { afunc: [Function], name: ‘Wang’ }
。
但是如果是对其中任何一个直接赋值,就会切断对最初对象的引用。
\n例如给 exports 直接赋值,就切断了 exports 对之前其和 module.exports 一同指向的对象的引用,但是由于真正输出的是 module.exports 指向的对象,所以对 exports 赋值无效,比如在 ep.js 输入:
\nexports.name = "Wang";\nvar afunc = function(){};\nexports = afunc; //注意对 require 无效\nconsole.log(exports); //内部有效,输出 [Function]\n
在另外一个 me.js 输入:
\nvar ep = require('./ep');\nconsole.log(ep);//输出 {name: 'Wang'},不是 [Function]\n
要让 exports 输出,可以在 ep.js 加上
\nmodule.exports = exports; \n
两者的 reference 关系再次建立。这样输出都是 [Function] 。
\n如果给 module.exports 直接赋值,也切断了 exports 的引用,同样道理,因为真正输出的是 module.exports 指向的对象,所以新赋给 module.exports 的对象将被输出。例如把 ep.js 改为:
\nexports.name = "Li";\nconsole.log(exports); //{name: 'Li'}\nconsole.log(module.exports);//一样 {name: 'Li'}\nmodule.exports = "Zhou";\nconsole.log(exports); //还是 {name: 'Li'}\nconsole.log(module.exports);//变为 Zhou\n
再次运行 me.js,输出 Zhou
, 覆盖了之前的对象.
真正输出总是 module.exports。如果两者同时出现或被修改,只有 module.exports 返回,exports 被忽略。
\n如题\n用POST方式上传文件,Express框架可以获得content-length的大小\n是否可以通过content-length的大小直接拒绝掉超过大小限制的请求,\n而不需要等到整个文件都上传完之后再判断文件的大小。
\n有人用过吗?\ngithub star 2500 左右\n看它自己列的功能到是挺全的\n
\nJS中好像没有抽象函数的概念啊,如何做到把实现放在子类中呢?
\nhttp://115.29.99.116:1400/index.html\n刚进去可能内容会挤在一块,稍微调整一下窗口大小就可以了。\n项目地址: https://github.com/tsq/xiami
\nRT,我想,用一个field来放转发人的信息,这个field是一个array,每个array里面有一个dic,是【人:转发时候说的东西】?
\n如果你依然在寻找一种开发移动应用的方式,而依然尚未决定采用 Ionic 的话,那么现在是时间做出选择了。我把现在 Ionic逐渐升温的迹象和为什么你会要通过 Ionic 来开发新的移动应用的原因列出来了。
\nIonic 是 GitHub 上排名前50位的项目之一,Ionic 已经一岁了,并且还在快速的发展中。有疑问?简单的提问就行,这也说明有大量的开发者在为了使 Ionic 成为最棒的框架而努力,同时这也带来了很多的机会。(来源)
\n目前为止你用来开发移动应用界面时候用到的 Ionic 的强大之处主要在框架上,然而Ionic 在他们的平台上提供了更多地特性。有一些现在已经开放了,比如 * Ionic View,一种不需要上传到应用商店就可以和其他人分享你的应用的方式,可以在客户端非常完美的展示应用。* Ionic Creator,在可视化编辑器通过拖拽就可以起草一个应用,虽然有限制,但却可以通过头脑风暴方式绘制出界面原型。 * Ionic Push Notifications,目前还处于内测阶段,可以通过 Ionic 的推送服务器来推送你的应用通知,如果自己实现挺恶心的。* Ionic Future Platform,还有其他一些服务,比如分析、设计工具、调试帮助。该集成平台将允许你快速的进行功能开发设计,与您的应用程序无缝协作。
\nIonic 社区非常了不起并且在快速发展,过去的一周里有将近3,000人在 Ionic 论坛注册(过去的一年有41,000),一共有大约54,000篇帖子。 Ionic在 Stack Overflow 上有超过1,700个话题,每天依然还在不断增长。
\n有些人喜欢尝鲜,但其他人并不喜欢这种不稳定和每一个测试版的变化。最后一个测试版目前已经发布,发布正式版指日可待。一旦正式版本出来了,你不应该就不需要担心开发后API的变化。可以预期随着时间的推移将会添加更多的功能,到时候肯定会是个惊喜!
\n在Angular的生态系统中 Ionic 不只是一个消费者,实际上Ionic 团队和Angular开发团队正在共同协作,为了下一个主要版本的发展而努力(估计还有一段时间,请耐心等待)。这也给了我信心让我相信将来 Ionic 和Angular会继续共同协作。
\nOk I had to plug the book, but I’m getting close to the final draft for Ionic in Action. I’m excited about it, and if you do grab a copy be sure to let me know how you like it in the author forum!
\n你还觉得 Ionic 那里很棒呢?在社区里和大家分享下吧!
\n偷偷的说下,这篇文章是翻译老外的,这里是原文。
\nIonichina社区正在建设中,欢迎大家有关 Ionic 方面的问题过来讨论哈~
\n用Nodeclub自己搭建了个社区,遇到了一些小问题,不过现在是正常跑起来了,分享下安装过程。
\n我的环境:
\nOS: CentOS release 6.6 (Final)
\nNodeJS: v0.10.36
\nMongoDB: 2.6.7
\nGit: 1.7.1
1.首先是安装环境,Node.js, MongoDB
\n安装 Node.js,点此查看
\n安装MongoDB,点此查看
\n安装 Git,点此查看
\n2.然后在 github 上 fork 了一份代码
\n3.clone到本地,拷贝一份config.default.js,重命名为 config.js,依据注释进行内容修改
\n有一个地方比较坑,发布版本一定要把debug设置为 false,否则邮件不能用
\n4.push 到 github自己 fork 出来的那份上
\n5.在服务器想要安装的目录,git clone 下来
\n6.执行安装命令
\nmake install
\n正常安装完后启动
\nnode app.js
,
\n访问看是否正常 http://ip:3000
7.用Upstart 进程守护工具来启动 Nodeclub
\n关于Upstart,这里有一篇介绍文章。
\n按照下面配置完事儿后,直接 start ionichina,正常启动,搞定收工!
附录:我的配置
\nmore /etc/init/ionichina.conf
\n显示
description "ionic china" \nauthor "ionichina.com" \nstart on runlevel [2345] \nstop on shutdown\n\nrespawn \nrespawn limit 99 5\n\nscript \n cd /alidata/server/nodeclub\n #npm start --production 2>&1 >> /dev/null\n node app.js\n exec /usr/bin/node /alidata/server/nodeclub/app.js >> /var/log/ionichina.log 2>&1\n\nend script\n
目前A轮前夕\nvenvyvideo.cn第一版 ,第二版3月初上线\n36kr的报道\nCEO专访\nCEO专访2
\nwjoy@venvyvideo.cn 邮件标题注明:来自cnode社区
\n少废话,上代码。nodejs 代码如下:
\nvar http = require("http");\nvar server = http.createServer(function(request, response) {\n response.writeHead(200, {\n "Content-Type": "text/html"\n });\n response.write("Hello World!");\n response.end();\n});\n\nserver.listen(8000);\n
测试结果:
\nlion$ wrk -t12 -c400 -d30s http://127.0.0.1:8000/\nRunning 30s test @ http://127.0.0.1:8000/\n 12 threads and 400 connections\n Thread Stats Avg Stdev Max +/- Stdev\n Latency 38.61ms 6.18ms 77.46ms 84.50 %\n Req/Sec 837.87 134.82 1.77k 81.78 %\n 297965 requests in 30.00s, 44.05MB read\n Socket errors: connect 0, read 453, write 0, timeout 90\nRequests/sec: 9931.42 \nTransfer/sec: 1.47MB\n
fibjs 相似代码如下:
\nvar http = require("http");\nvar svr = new http.Server(8080, function(req) {\n var rep = req.response;\n rep.addHeader({\n "Content-Type": "text/html"\n });\n rep.body.write(new Buffer("Hello World!"));\n});\n\nsvr.run();\n
测试结果如下:
\nlion$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/\n\\Running 30s test @ http://127.0.0.1:8080/\n 12 threads and 400 connections\n Thread Stats Avg Stdev Max +/- Stdev\n Latency 16.73ms 31.61ms 162.45ms 94.93 %\n Req/Sec 3.25k 822.21 5.28k 89.45 %\n 1137450 requests in 30.00s, 160.54MB read\n Socket errors: connect 0, read 282, write 0, timeout 0\nRequests/sec: 37916.03 \nTransfer/sec: 5.35MB\n
可是有些代码对 fibjs 纯属多余,精简一下:
\nvar http = require("http");\nvar svr = new http.Server(8080, function(req) {\n req.response.body.write(new Buffer("Hello World!"));\n});\n\nsvr.run();\n
测试结果如下:
\nlion$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/\nRunning 30s test @ http://127.0.0.1:8080/\n 12 threads and 400 connections\n Thread Stats Avg Stdev Max +/- Stdev\n Latency 24.39ms 71.85ms 343.96ms 95.11 %\n Req/Sec 3.99k 1.00k 6.67k 91.61 %\n 1379337 requests in 30.00s, 161.80MB read\n Socket errors: connect 0, read 270, write 0, timeout 0\nRequests/sec: 45980.00 \nTransfer/sec: 5.39MB\n
初学node 想建立一个Node server 可以GET request 其他API 然后把反馈的信息 在加工 然后存到MongoDB 里面\n然后再发送电子邮件给收件人,不知道可不可能实现。请有检验的Node友 分享经验或者代码。先谢谢了。
\nRT
\n这是用来访问的代码:\nvar http = require('http');
\nvar req = http.request({
\nmethod: 'POST',
\nport: 3000,
\nheaders: {
\n'Content-Type': 'application/json'
\n}
\n},function(res){
\nconsole.log(res);
\n});
req.write('{"foo":"');
\nvar n=300000;
while (n--){
\nreq.write('foo,');
\n}
req.end('bar"}');
\nconsole.log("over");
下面是后端代码:
\nvar connect = require('connect');
\nvar bodyParser =require("body-parser");
\nvar app = connect();
app.use(function(res,req,next){
\nconsole.log("start");
\nnext();
\n});
\napp.use(bodyParser());
\napp.use(function(req,res){
\nconsole.log(req.body.foo);
\nres.end("ok\\n");
\n}).listen(3000);
都运行后,结果什么事情都没发生
\n默认的routes中的index想要发送一个html页面\nvar express = require(‘express’);\nvar router = express.Router();
\n/* GET home page. */\nrouter.all('/’, function(req, res, next) {\nres.sendfile(“./views/index.html”);\n});
\nmodule.exports = router;\n能够发送但是外部关联css和js都不能加载,求问为啥
\n我用curl -F image=@head.png -F name=tobi http://192.168.0.100:3000
,想上传一张图片,并把它解析\n但是总是出现问题\n输出如下\n{}
\nundefined
\n后端如下
var connect = require('connect');
\nvar bodyParser =require("body-parser");
\nvar app = connect();
app.use(bodyParser());
\napp.use(function(req,res){
\nconsole.log(req.body);
\nconsole.log(req.files);
\nres.end("ok\\n");
\n}).listen(3000);
求解原因
\n初学Nodejs 想写个爬xml的爬虫\n本来想用cheerio 结果发现无法解析<![CDATA[我是无法解析的CDATA]]>
\n上网搜了下发现基于sax-js的xmlreader模块可以解析\n自己写了个 发现无论怎样输出都是空的 上网搜了也无果
\n没办法了 只好求助各位大大麻烦解答一下
var superagent = require('superagent');\nvar xmlreader=require('xmlreader');\n superagent.get('http://hexo.io/atom.xml')\n .end(function (err, sres) {\n if (err) {\n return next(err);\n }\n xmlreader.read(sres.text,function(err,res){\n if(err) return next(err);\n \n console.log( res.feed.text());\n })\n });\n
网上的例子都是读取本地的xml文件 难道这个模块只能读本地的?\n如果有更优雅的方法可以解析CDATA也请告诉我哈~
\n自己正在用,每天有100M流量,速度还不错\nhttp://www.mxvpnjsq.cc/download.php\n平台支持很全的的哦!
\n