我想给一些菜鸟看看nodejs的代码应该怎么写
nodejs吧
全部回复
仅看楼主
level 1
fengdayin 楼主
var cookie = require('cookie');
module.exports = function (req, res, conf, views, db) {
..var body = req.body,
....id = req.ids[0],
....usid = cookie.parse(req.headers.cookie).usid;
..function redirect () {
....res.writeHead(302, { 'location' : '/accounts' });
....res.end();
..}
..function joinpage () {
....res.writeHead(200, { 'Content-Type' : 'text/html;charset=utf-8' });
....res.write(views.ACCOUNTS_JOIN);
....res.write(views.unit({
......id : 'accounts_menu',
......name : 'accounts_menu',
........options : {
..........class_id : id
........}
....}));
....res.write(views.unit({
......id : 'accounts_join',
......name : 'accounts_join',
......options : {
........action : '/accounts/' + id + '/join',
........num : '0'
......}
....}));
....res.end(views.FOOTER);
..}
..db.session(usid, function (state) {
....// 已经建立会话
....if (state) {
......joinpage();
......return;
....}
....// 没有建立会话
....redirect();
..});
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////
这段代码,是nodejs其中一个路由处理函数.
使用到了views视图模型,db数据库模型,以及conf全局配置文件.
并且使用了cookie模块来解析会话ID.
views视图模型 : 生产HTML界面 [可以随时切换到PC或者移动HTML,接口一致]
db数据模型 : 生产数据库数据
conf全局配置文件 :你所需要的全局环境内容
[茶杯]代码的功能:
检测请求
....是否建立会话?
........是,跳转到"/"路由
........否,为用户显示登录界面
[茶杯]其中views负责生产视图界面, 在views模型中缓存了大量的常量,类似ACCOUNTS_JOIN,是页面布局。
对于其中的动态内容,采用facebook的bigpipe技术。
views.unit(/*id, name, css, js, content*/)输出script片段,分流到浏览器渲染。
整个服务器端在启动时渲染完毕所有的页面布局体,并缓存到views模型中,动态内容由bigpipe发送到前端渲染。
2014年06月07日 01点06分 1
level 1
fengdayin 楼主
var validator = require('validator'),
cookie = require('cookie'),
secury = require('secury');
module.exports = function (req, res, conf, views, db) {
..var body, usid, id;
..id = req.ids[0];
..usid = cookie.parse(req.headers.cookie).usid;
..body = req.body; console.log(body);
..body.account_name = body.hasOwnProperty('account_name') ? req.body.account_name.toLowerCase() : '';
..body.stuid = body.hasOwnProperty('stuid') ? req.body.stuid : '';
..body.name = body.hasOwnProperty('name') ? req.body.name : '';
..body.amount = body.hasOwnProperty('amount') ? req.body.amount : '';
..body.is_new_account = body.hasOwnProperty('is_new_account') ? req.body.is_new_account : '1';
..function redirect () {
....res.writeHead(302, { 'location' : '/accounts/login' });
....res.end();
..}
..function reportError (msgs) {
....res.writeHead(200, { 'Content-Type' : 'text/html;charset=utf-8' });
....res.end(JSON.stringify(msgs));
..}
..function create (f) {
....var joinDate, account, msgs = {};
....msgs.accountnameMsg = validator.validate(validator.username, body.account_name);
....msgs.stuidMsg = validator.validate(validator.stuid, body.stuid);
....msgs.nameMsg = validator.validate(validator.username, body.name);
....msgs.amountMsg = validator.validate(validator.amount, body.amount);
....for (var name in msgs) {
......if (msgs[name] !== '') {
........// 内容错误
........msgs.account_name = body.account_name;
........msgs.stuid = body.stuid;
........msgs.name = body.name;
........msgs.amount = body.amount;
........f.call(null, false, msgs);
........return;
......}
....}
....joinDate = new Date();
....account = {
......class_id : id,
......account_name : body.account_name,
......stuid : body.stuid,
......name : body.name,
......is_new_account : body.is_new_account,
......amount : body.amount,
......join_date : joinDate,
......is_commit : '0'
....};
....db.accountInsert(account, function (state) {
......if (!state) {
........// 内容错误
........msgs.account_name = body.account_name;
........msgs.stuid = body.stuid;
........msgs.name = body.name;
........msgs.amount = body.amount;
........msgs.accountnameMsg = '用户名已存在';
........f.call(null, false, msgs);
........return;
......}
......res.writeHead(200);
......res.end();
......});
....}
..db.session(usid, function (state) {
....// 没有建立会话
....if (!state) {
......redirect();
......return;
....}
....// 已经建立会话
....create(function (state, msgs) {
......// 没有通过验证
......if (!state) {
........reportError(msgs);
......}
....});
..});
};
////////////////////////////////////////////////////////////////////
这个路由处理函数, 检测用户会话id, 然后校验用户输入的数据,出错则回复用户错误,如果校验正确,储存用户数据,创建用户帐号。
2014年06月07日 02点06分 2
level 1
fengdayin 楼主
如果你的回调不会写,就好好练习练习怎么抽象接口。
归根结底不是回调难写,是你不懂模块化、面向对象和设计模式。
[即便是在函数式, 面向对象的思想也体现在各个模块化设计中]
2014年06月07日 02点06分 3
level 5
在别人框架下写是不得已的好么,backbone cocos2d,我还要改别人调用的函数?一但异步了就无法真正的回来了好么,我知道你不懂怎么回事儿,所以还在这里不懂装懂。
2014年06月07日 06点06分 4
level 5
我就问你我给你个函数
function getdata(){
var data;
...//你在这里来个异步给data赋值试试啊
return data;
}
你在里面填上异步试试。
2014年06月07日 06点06分 5
我知道煞笔试不出来
2014年06月07日 06点06分
不懂的话你就去看看wind.js,了解下差距在哪里
2014年06月07日 06点06分
level 5
给你看一眼什么叫做异步,看出异步了没?
2014年06月07日 06点06分 6
异步你个p呀, IIS和ADO.NET就不是基于事件驱动写的,还异步,在外边包个迷彩服还真当自己是吉普了。连一点起码的尝试都没有!
2014年06月07日 14点06分
回复 fengdayin :语言的作用就是如此,不好意思完爆js,你把语言的作用否定了你还写个屁js啊,你咋不去玩机器语言呢,你还分个毛模块啊,一顺流写下来算了,机器都是01而已,穿上几件衣服当自己是飞机了啊。
2014年06月07日 14点06分
回复 sikele2236 : 你知道什么叫做API ? 菜鸟!? 我笑吐了!
2014年06月07日 14点06分
回复 fengdayin :你知道什么叫编程? 无脑嘲笑谁不会似得,js这么渣的回调机制都看不出差距,这就是智商的差距啊。
2014年06月07日 14点06分
level 1
fengdayin 楼主
你这种嫩鸟, 早十年呢, 孩子。
function getdata(f){
..var data = 100;
..setTimeout(function () {
....f(data + 1000); // 1秒种后映射data+1000
..}, 1000);
}
getdata(console.log.bind(console)); // 1秒钟后打印1100
2014年06月07日 14点06分 7
太搞笑了,审题呢? 说好的return出来呢? 到你这里怎么有回调来回调去的,你看看你吧代码结构搞成什么样子了,就返回个数值而已嘛,到现在还不知道差距真是说你智商低呢还是智商低呢。
2014年06月07日 14点06分
回复 sikele2236 :return出来, 说你菜比,你还真是个菜比啊! 你懂什么叫回调函数吗? 回调函数的历史可以起源到1956年的lisp和1978年的c语言! 不懂就好好查查资料, 别在这到处丢人!
2014年06月07日 14点06分
回复 fengdayin :老了就过时了呗,这么落后的技术也好意思说得出口,和同步代码结构一样的异步,不完爆你的渣渣回调? 明明一个方法就搞定了,看哥的 function getdata( ){ rerurn await getdatainterator(); } 这就异步回来了,直接返回了都,你还在这里绕弯子呢,继续回调啊,回调的意思就是回不来
2014年06月07日 14点06分
回复 sikele2236 : 呵呵, 我又一次喷了! “老了就过时了呗,这么落后的技术也好意思说得出口”! 你的下限一次次的喷发呀!lisp是现在人工智能的主要语言,操作系统现在都是c语言写的,一些电子器件核心程序是c语言在控制! 说你是小孩子,你还真把头上贴上大字条:“小孩子,嫩”!
2014年06月07日 14点06分
level 1
fengdayin 楼主
函数式编程, 声明式编程, 这样的词, 估计你这嫩鸟都没听说过
2014年06月07日 14点06分 8
js又没有,可是.net平台都有,你上哪拉外援啊,哈哈
2014年06月07日 14点06分
回复 sikele2236 : js是函数式范式+面向对象范式, 不好意思的是C
#是个纯面向对象范式! F#
, 也就是微软在推广的新语言才是个函数式范式的语言! 菜鸟, 你都落后10多年了!
2014年06月07日 14点06分
回复 fengdayin :js还面向对象呢,通过原型好不容易这么多年下来终于模仿出了面向对象就敢叫做面向对象了,笑死人了,照你这么说汇编也能叫做面向对象了函数式声明式了,能实现就是嘛。
2014年06月07日 14点06分
回复 sikele2236 : 模仿出了面向对象! 呵呵! 菜比,再给你科普一次! JS是采用的LISP的函数式+面向对象双范式开发的。 现在的Scala Clojure Go都是采用双范式, 就连F#都是学的双范式!你的微软老东家无情的打了你的脸!可惜你学的是C#这么弱比的语言!
2014年06月07日 15点06分
level 5
我承认js由于浏览器变成一门web端必须的语言,可惜落后的语法就是落后,看看mvvm的实现哪个比得过wpf的?看看后端mvc框架那个比的过asp.net mvc的,大家想尽办法打补丁也不过如此,以至于typescript dart齐上,还是无法根本挽回,可怜可悲,阻碍了技术的发展。
2014年06月07日 15点06分 9
aiyo! 你这种菜鸟评价落后! 你来演相声的嘛! 连HTTP 和 API是怎么回事,都闹不明白,还评价一个语言! 还是赶快去买本书学学F
#吧, 老掉呀的菜到骨子里的C#
程序员!
2014年06月07日 15点06分
没事买本《javascript good parts》好好虚心的学习学习,书里边批评了各种各样的菜鸟。
2014年06月07日 15点06分
这本书可是JSON的发明者写的,菜鸟! 好像又打了一次你的脸,难道说你还是传说中的XML数据传递程序员吗?
2014年06月07日 15点06分
level 5
专打你脸,请搜索mono,请搜索asp.net vnext,请搜索monogame,请搜索unity3d,看看什么叫跨平台。
2014年06月07日 15点06分 10
笑喷了! 跨平台! 哈哈! 原生不支持! 这么垃圾的封闭的语言! 还有脸穷比比!
2014年06月07日 15点06分
微软程序员跳出来,跟人家比跨平台,能再搞笑点吗?
2014年06月07日 15点06分
level 6
好好一个帖子被你们给歪了,另外开贴好吗
2014年06月10日 04点06分 11
1