从去年7月份开始做的公司官方网站,
- 使用了express框架
- jade模版
- node-cavans做了验证码
- 支持makedown的博客
- 后台jquery文件上传功能
- 集成了单点登陆功能
用户注册的功能我把它屏蔽了,你们看不到,呵呵.
公司官方网站链接: http://www.bizhisoft.com/
ps: 请同行们手下留情,不要恶意攻击我的网站啊.
其实我还用nodejs做了一个失败的企业应用产品,发现nodejs不适合做逻辑复杂的企业应用,特别是在生成报表的时候,由于nodejs天生的异步调用,导致按逻辑顺序处理多个数据集合是非常头疼,需要用变量来保证函数的执行顺序.这个对编程能力要求很高,不适合团队开发,不过nodejs实现权限控制的功能没有问题的.
我习惯用sublime做nodejs开发,边写代码边查看网站的显示效果,出现bug就用console.log抓一下变量,完全不用其他的开发工具,因为像eclipse这种开发工具都太大,运行太慢了.
@yakczh ,函数式编程比面向对象编程虽然减少了全局变量,但是遇到合并的问题就头大了,比如要将两个数据源的数据同步并合并,这个promise是解决不了的,promise只是把函数层层嵌套的写法变成顺序的写法.本质上是解决不了合并的问题,具体推荐你阅读SCIP关于函数式编程的章节
usherwong眼尖,被你看穿了,呵呵,刚开始是用bootstrap 2,后来升级到bootstrap 3,有兼容问题,要改动的地方还不少,特别是表单那一块。
做这个官方网站总的工作量也不大,我就是一个人利用开发产品的业余时间断断续续改了改,用nodejs开发主要的难点就是要用异步编程的方式去设计程序。还有网站的架构要不断自己摸索改进。不像asp.net那么成熟,不过asp.net框架太死了,做一个http handle模块太麻烦,而nodejs是直接在express框架里的app.use引入一个函数就解决问题了。
以前尝试把产品做成BS结构的,做到一半放弃了,一是花的effort有点大,二是没办法做详细的测试,质量不可靠,三是javascript源代码得不到很好的保护,因为最终产品是要给客户的,而nodejs都是动态读取js文件,虽然我也用C++ addon专门写了源代码保护的组件,但是高手还是可以通过修改入口文件或是截获解密后的文本绕过去的,最重要的一点是要用户装nodejs环境和模拟,简直不可能的事情,而我们公司的产品就这点价格,跑去帮客户装linux系统,装软件,卖一套产品的钱还不够来回车费和住宿费用.
不是无法完成,而是实现起来比较复杂,稍有不慎,就是死循环,mongodb直接down掉。 例如,航班订阅系统中有两张表,一个是舱单表,记录了所有乘客的航班订单的信息(出发地,目的地),另一张表是关于乘客的详细信息(姓名,所在地区),现在要用nodejs读取mongodb中这两张表的数据,统计出2014年每个季度中,总航班数量大于10次的乘客所在地区的分布情况。
使用 xss
模块:
- 先安装:
npm install xss
- 在代码中使用:
var xss = require('xss');
// 直接调用xss函数即可
console.log(xss('<a onclick="alert(/xss/)">click me</a>'));
他意思是关系型数据库,我觉得这块不是问题,用mongodb一样可以解决,两张表一定是有ID进行关联的,我首先查找乘坐10次以上的乘客,然后在关联用户表进行下一步的查询。为代码就是
航班大于10次.then(function(results){ if(results) for -> 用户id return ids return Promise.reject(err); }).then(function(ids){ return mongodb in ids }).then(function(results) { //这里就是结果。 }
给段我们公司项目真实的代码让你看看,看完之后就知道为什么函数式编程实现合并的困难之处
这段代码是用来得出可用性分析的报表的,从日历表,班次表,系统表,模块表,事件表读取数据并合并处理, 其中moduleIterator,systemIterator使用来控制正确的处理顺序的。
exports.analysis = function(req, res, systems, startDay, endDay, interval) { Calendar.find().exec(function(err, calendars) { Shift.find().exec(function(err, shifts) { var result = new Array(); var systemIterator = 0; systems.forEach(function(system) { var resultItem = {}; resultItem.system = system.system_code; result.push(resultItem); resultItem.modules = new Array(); Module.find({ system_code: system.system_code }).exec(function(err, modules) { var moduleIterator = 0; modules.forEach(function(module) { Event.find({ module_code: module.module_code, event_date_time: { $gt: startDay, $lt: endDay } }).exec(function(err, events) { var resultItemItem = {}; resultItem.modules.push(resultItemItem); resultItemItem.module_code = module.module_code; (省略代码…) resultItemItem.schedule_time = (省略代码…) (省略代码…) resultItemItem.intervals = new Array(); var intervalArray = (省略代码…) intervalArray.forEach(function(intervalItem) { var resultItemItemItem = {}; resultItemItem.intervals.push(resultItemItemItem); (省略代码…) resultItem.eventtypeLength = eventtypes.length; eventtypes.forEach(function(eventtype) { var resultItemItemItemItem = {}; resultItemItemItem.eventtypes.push(resultItemItemItemItem); (省略代码…)
var eventFilters = _.filter(events, function(event) {
return event.event_type == eventtype.code && event.start_date_time >= resultItemItemItem.start_day && event.start_date_time <= resultItemItemItem.end_day
})
eventFilters.forEach(function(eventFilter) {
resultItemItemItemItem.event_time += (省略代码...)
(省略代码...)
})
})
(省略代码...)
moduleIterator++;
if (moduleIterator == modules.length) {
systemIterator++;
if (systemIterator === systems.length) {
var report = (省略代码...)
report.save(function(err) {
if (err) {
res.send(500)
} else {
res.json({
url: '/reports/result?ID=' + report._id
})
}
})
}
}
})
})
})
})
}) }) }
没有用node写过太复杂的逻辑。ebay里的逻辑应该不简单吧,但是node也能应付。尝试用一些流程控制的框架,重构下代码,应该会好很多的。 那一堆}}}}}}}}}}}}}}}}}}}}}}}}}太泯灭人性了。
这颜色。。。。可以看出楼主很用心了,但是还是觉得。。。 色差有点大,风格不固定————个人观点。。。 功能上没看到什么问题,毕竟也不复杂,发展空间还是很广阔的,觉得会受到中小企业的青睐。 支持一下。 最后也忍不住吐槽一下公司名字。。。确实有点亮~~~
前端用 jquery file upload 组件,后台用nodejs实现接口就行了,有开源的组件,不过要修改,集成进自己的框架里面,什么文件都可以传,1G大小的文件都没问题,我现在基本上把它当存储中心。计划将其改造成电子档案中心,呵呵,可以检索,不同的用户有不同的文件夹和权限。。。
@bizhisoft = = 干嘛要写成这样,过俩月鬼才知道这段代码在干嘛
“Write small modules that each do one thing, and assemble them into other modules that do a bigger thing. You can’t get into callback hell if you don’t go there.”
可以的,route是注册到express框架里面,express框架带错误处理。 请看下面代码
// Require Dependencies
var express = require('express');
var app = express();
// Middleware
app.use(app.router); // you need this line so the .get etc. routes are run and if an error within, then the error is parsed to the ned middleware (your error reporter)
app.use(function(err, req, res, next) {
if(!err) return next(); // you also need this line
console.log("error!!!");
res.send("error!!!");
});
// Routes
app.get('/', function(request, response) {
throw "some exception";
response.send('Hello World!');
});
// Listen
app.listen(5000, function() {
console.log("Listening on 5000");
});
@bizhisoft 比如你这行 Module.find({ system_code: system.system_code }).exec(function(err, modules) { var moduleIterator = 0;
如果这个 err 你不处理的话是不会抛出异常的
本人在大公司有正式工作,只是利用业余时间搞搞副业,所以开了个小公司,目前光棍司令一个,公司的网站和产品都是我一个人做的,工作快六年了吧,大学时代学的是教育技术专业,自学计算机,考过高级程序员, 曾猛啃C++和算法,毕业设计用UML做了个系统的分析和设计,工作开始用C#,慢慢工作的重心转向 javascript, 业余时间学了linux和数学和Lisp,喜欢使用debian linux. 因公司外派出过一趟国,回国开始思考创业. 目前我写的软件DACAAS是用C#做的,最值得称赞的是自带scheme语言解释器,可惜总感觉使用难度有点高,用户用不来,还有只是单机版,没有数据可视化的功能. 我计划再利用一年时间,将nodejs和node-webkit融入到DACAAS这个产品中,做出超越SPSS的产品,希望有一天中国人也有自己的通用强大的数据分析软件吧,下一代的软件的架构和设计已经在规划中了,细节我就不多说了,等产品做出来再说吧.