2017,一切才刚刚开始。

又是一年结束,明天就是2017了,这一年做了很多事:实习、毕业、工作。广州、丽江、重庆、北京、长沙、杭州、走了5个城市。开心、懊恼、苦涩各种心境。从一个编程的门外汉真正成为了一个初级前端开发工程师。也算是人生又一个新的起点吧。

博客

先说说博客,从第一篇博客开始到现在一年零一个月了。一共 50 篇,博客总字数为:338202,产量不算高。不过值得高兴的是一年下来总流量量有 15W,应该还算不错吧。不仅是对自己学习的一个记录,应该也帮助到了不少人。终于把域名买了 blog.guowenfh.com

博客访问统计

阅读全文

《自控力》笔记:意志力实验与深入剖析

第一周:我要做,我不要,我想要:什么是意志力?为什么意志力至关重要?

意志力第一法则:认识你自己

当我们做一件事的时候,我们能意识到自己在做什么,也知道我们为什么这样做。
但愿我们还能知道,在做这件事情之前我们需要做些什么,这样我们就会三思而后行。

核心思想:
- 意志力实际上是“我要做”、“我不要”和“我想要”这三种力量。它们协同努力,让我们变成更好的自己。

深入剖析:更难的事是什么?

  • 想象你正面临一个意志力的挑战。更难的事是什么?为什么它如此困难?

  • 认清两个自我。你的意志力挑战是,如何描述相抗衡的两个自我?冲动的你想要什么?明智的你又想要什么?

意志力实验: 回忆一下你的决定

如果你想有更强的自控力, 就得有更多的自我意识。

首先你得知道, 什么样的决定需要意志力。 有些决定比较明显, 比如“ 下班后要不要去健身?” 但有些冲动的后果可能要过些日子才会显现。比如, 你是不是先装好了运动背包, 以便不用回家就能去锻炼?( 这是个不错的做法! 这样你就没那么多借口了。) 你是不是接了个电话,然后聊着聊着就饿了, 没办法直接去健身了?( 哎呀! 你要是先去吃饭, 八成就不会去健身了。)

请至少选一天, 把你作的决定都记下来。在这一天结束的时候, 回想你作的决定, 分析哪些有利于你实现目标, 哪些会消磨你的意志。 坚持记录你的决定, 还有助于减少在注意力分散时作决定, 同时增强你的意志力。

意志力实验:5分钟大脑冥想

专心呼吸是一种简单有效的冥想技巧, 它不但能训练大脑, 还能增强意志力。
它能减轻你的压力, 指导大脑处理内在的干扰( 比如冲动、 担忧、 欲望) 和外在的诱惑( 比如声音、 画面、 气味)。 新研究表明, 定期的思维训练能帮人戒烟、 减肥、 戒毒、 保持清醒。 无论你“ 要做” 和“ 不要” 的是什么, 这种5分钟冥想都有助于你增强意志力。

1. 原地不动, 安静坐好。
坐在椅子上, 双脚平放在地上, 或盘腿坐在垫子上。 背挺直, 双手放在膝盖上。 冥想时一定不能烦躁, 这是自控力的基本保证。
如果你想挠痒的话, 可以调整一下胳膊的位置, 腿交叉或伸直, 看自己是否有冲动但能克制。 简单的静坐对于意志力的冥想训练至关重要。 你将学会, 不再屈服于大脑和身体产生的冲动。

2. 注意你的呼吸。
闭上眼睛。 要是怕睡着, 你可以盯着某处看, 比如盯着一面白墙, 但不要看家庭购物频道。 注意你的呼吸。 吸气时在脑海中默念“ 吸”,呼气时在脑海中默念“ 呼”。
当你发现自己有点走神的时候, 重新将注意力集中到呼吸上。 这种反复的注意力训练, 能让前额皮质开启高速模式,让大脑中处理压力和冲动的区域更加稳定。

3. 感受呼吸, 弄清自己是怎么走神的。
几分钟后, 你就可以不再默念“ 呼”、“ 吸” 了。试着专注于呼吸本身。会注意到空气从鼻子和嘴巴进入和呼出的感觉,感觉到吸气时胸腹部的扩张和呼气时胸腹部的收缩。
不再默念“ 呼”、“ 吸” 后, 你可能更容易走神。 像之前一样, 当你发现自己在想别的事情时, 重新将注意力集中到呼吸上。 如果你觉得很难重新集中注意力, 就在心里多默念几遍“ 呼” 和“ 吸”。
这部分的训练能锻炼你的自我意识和自控能力。刚开始的时候, 你每天锻炼5分钟就行。 习惯成自然之后, 请试着每天做10~ 15 分钟。
如果你觉得有负担, 那就减少到5分钟。 每天做比较短的训练, 也比把比较长的训练拖到明天好。 这样,你每天都会有一段固定的时间冥想, 比如早晨洗澡之前。 如果你做不到, 可以对时间进行适当的调整。

第二周:意志力的本能:人生来就能抵制奶酪蛋糕的诱惑

深入剖析:什么是威胁?

我们总觉得诱惑和麻烦来自外部世界,比如危险的甜甜圈、罪恶的香烟、充满诱惑的网络。但自控力告诉我们,问题出在我们自己身上,是我们的思想、欲望、情绪和冲动出了问题。对你的意志力挑战来说,最重要的是认清什么是需要克制的内在冲动。哪些想法或感觉迫使你在不情愿的时候作出决定?如果你不确定的话,可以作一些实地观察。

下一次你受到诱惑的时候,试着关注自己的内心世界(意志力本能:三思而后行,   “三思而后行”反应就是让你慢下来。当你意识到内在冲突的时候,大脑和身体会做出反应,帮助你放慢速度、抑制冲动。虽然“三思而后行”和应激反应都是人类天性中的一部分,想了解为何意志力本能不是总能生效,我们需要深入了解压力和自控力的生理学基础。)

意志力实验:通过呼吸实现自控

将呼吸频率降低到每分钟4~6次,也就是每次呼吸用10~15秒时间,比平常呼吸要慢一些。只要你有足够的耐心,加上必要的练习,这一点不难办到。放慢呼吸能激活前额皮质、提高心率变异度,有助于你的身心从压力状态调整到自控力状态。这样训练几分钟之后,你就会感到平静、有控制感,能够克制欲望、迎接挑战。(不要憋气)

意志力实验:5分钟给意志力加油

科学家认为,5分钟的“绿色锻炼”就能减缓压力、改善心情、提高注意力、增强自控力。“绿色锻炼”指的是任何能让你走到室外、回到大自然怀抱中的活动。好消息是,“绿色锻炼”有捷径可走。短时间的爆发可能比长时间的锻炼更能改善你的心情。以下是一些你在5分钟“绿色锻炼”中可以尝试的活动:
- 走出办公室,找到最近的一片绿色空间。
- 用iPod播放一首你最喜欢的歌曲,在附近
街区慢跑。
- 和你的宠物狗在室外玩耍(你可以追着玩
具跑)。
- 在自家花园里找点事情做。
- 出去呼吸新鲜空气,做些简单的伸展活
动。
- 在后院里和孩子做游戏。

如果你觉得锻炼太累了,或是没有时间锻炼,那么不妨将锻炼当做恢复体能和意志力的方法。

意志力实验:呼噜呼噜睡个觉

睡出意志力! 如果你每天睡眠时间不足6个小时,那你很可能记不起自己上一次意志力充沛是什么时候了。长期睡眠不足让你更容易感到压力、萌生欲望、受到诱惑。你还会很难控制情绪、集中注意力,

如果你现在缺乏睡眠,有很多方法都能帮助你恢复自控力。即使你不能每晚都连续睡上8小时,作一些小调整也会起到明显的效果。一些研究表明,一个晚上良好的睡眠就能帮助大脑恢复到最佳状态。所以,如果你已经一周都晚睡早起了,那么周末补个好觉就能让你恢复意志力。

其他研究指出,一周的前几天睡些好觉能帮你储备能量,这样就能对付后几天的睡眠不足了。另外还有一些研究表明,最重要的指标是你连续清醒的时间。即便你前一晚没有睡好,打个小盹也能让你重新集中注意力、恢复自控力。你可以尝试补觉、储存睡眠,或是打个小盹,这些策略都有助于减少睡眠不足带来的危害。

如果你明知道自己能获得更多的睡眠,却没法早点入睡,那就不要想睡觉这件事!

想一想你到底对什么说了“我想要”。这个意志力法则同样适用于你想逃避或拖延的事——当你不知道自己想做什么的时候,你或许需要知道自己不想做什么。

意志力实验:放松能让你恢复意志力储备

从压力和自控力中恢复的最佳途径就是放松。放松,即便只放松几分钟,都能激活副交感神经系统,舒缓交感神经系统,从而提高心率变异度。它还能把身体调整到修复和自愈状态、提高免疫功能、降低压力荷尔蒙分泌。
想要激发这种放松反应,你需要躺下来,用枕头垫着膝盖,腿稍稍抬起(或者,你可以选择任何一个你觉得舒服的姿势)。闭上眼睛,做几次深呼吸,感觉你的腹部有起伏。如果你觉得身体某处很紧张,你可以有意识地挤压或收缩肌肉,然后就不要再去管它了。比如,如果你发现手掌和手指很紧张,那么就攥一下拳头,然后张开手掌。如果你发现前额和下巴很紧张,那么就挤挤眼、皱皱眉,然后张大嘴巴,放松整个面部。保持这种状态5~10分钟,试着享受这种除了呼吸什么都不用想的状态。如果你担心会睡着,那就先设定好闹钟。
你可以把这当成一项日常练习。尤其是当你处于高压环境中或者需要意志力的时候,都可以做这个练习。放松会让你的生理机能得以恢复,同时消除慢性压力和自控带来的影响。

深入剖析:压力和自控 本周回顾

本周,我们研究了自控力的死敌——压力,心理上或生理上的压力。担忧和过度工作是如何影响你的选择的?饥饿和疲劳会不会消耗你的意志力?身体疼痛或疾病会不会消耗你的意志力?愤怒、孤单或悲伤的情绪会不会消耗你的意志力?试着找出持续一整天或一整周的压力,看看它对你的自控力产生怎样的影响。你有过强烈的欲望吗?你发脾气了吗?你把要做的事拖到了明天吗?

第三周:累到无力抵抗:为什么自控力和肌肉一样有极限?

深入剖析:意志力波动

意志力的肌肉模式告诉我们,自控力从早上到晚上会逐渐减弱。这一周,试着观察自己在什么时候意志力最强,在什么时候最容易放弃。

你是不是起床的时候意志力十足,但这种意志力慢慢会消耗殆尽?或者,你有没有在其他时候觉得自己恢复了意志力,觉得神清气爽?你可以通过了解自己来更明智地规划日程,以便在意志力耗尽的时候克制住自己。

意志力实验:意志力饮食方案

突然增加的糖分会让你在短期内面对紧急情况时有更强的意志力。调整饮食也需要自控力,但哪怕你只做了一点改善(比如,每个工作日都吃一顿丰盛健康的早餐,而不是什么都不吃;吃零食时选择坚果,而不选择糖果),你获得的意志力都会比你消耗的多。

意志力实验:锻炼意志力

如果你想彻底改变旧习惯,最好先找一种简单的方法来训练自控力、提高意志力,而不是设定一个过高的目标。

1. 增强“我不要”的力量:不随便发誓(或者不说某些口头禅)、坐下的时候不跷脚、用不常用的手进行日常活动,比如吃饭和开门。
2. 增强“我想要”的力量:每天都做一些事(但不是你已经在做的事),用来养成习惯或不再找借口。你可以给母亲打电话、冥想5分钟,或是每天在家里找出一件需要扔掉或再利用的东西。
3. 增强自我监控能力:认真记录一件你平常不关注的事,可以是你的支出、饮食,也可以是你花在上网和看电视上的时间。你不需要太先进的工具,铅笔和纸就够了.

深入剖析:你的疲惫感是真的吗?

我们总是一感到疲劳就放弃锻炼、对另一半厉言相加、把事情拖到下一秒、选择点比萨而不是做一顿健康的饭菜。可以肯定地说,生存的需要确实会耗尽我们的意志力,我们也不可能要求一个人有完美的自控力。但比起第一次感觉疲劳就放弃,你其实有更多的意志力。

下一次你觉得自己“疲惫”得没法自控的时候,试着挑战一下自己,挺过第一波疲惫感。不过,要注意不要训练过度。

意志力实验:你的“我想要”的力量是什么?

这一周,当你面临挑战的时候,问问自己,那一刻哪种动力最能让你坚持下去。你愿不愿意为了别人,而不是为了自己,去做那些困难的事?是对未来的憧憬,还是对命运的恐惧,推动你前进?当你发现了自己最重要的“我想要”的力量,发现了你脆弱时给你力量的东西之后,只要你觉得自己就要在诱惑前放弃了,就想想这个动力。挖掘你的“我想要”的力量,让自己恢复能量。

1. 如果挑战成功,你会收获什么?你个人会有什么回报?你会更健康、更幸福、更自由、更有钱,还是会更成功?
2. 如果挑战成功,还有谁会获益?肯定有人依赖于你,你的选择会影响到他们。你的行为会如何影响你的家人、朋友、同事、雇主或雇员、街坊邻居?你的成功会怎样帮到他们?
3. 如果你现在愿意做困难的事,那么一段时间后,这个挑战将会变容易。你能想象出,如果你在这个挑战中取得进步,你的生活会是什么样子,你自己会变成什么样子吗?如果你知道你还有更大的进步空间,现在的不适是不是变得值得了呢?

第四周 :容忍罪恶:为何善行之后会有恶行?

深入剖析:善与恶

先来看看我们总是在生活中的对于我们的行为所做的一个“道德许可”:如果你去锻炼了就说自己很“好”,没去锻炼就说自己很“坏”,那么你很可能因为今天去锻炼了,明天就不去了。如果你去处理了一个重要项目就说自己很“好”,拖延着不去处理就说自己很“坏”,那么你很可能因为早上取得了进步,下午就变懒散了。简单说来,只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。

这一周,试着观察你意志力挑战成功和失败的时候,你是怎么对自己和他人解释的。
- 当你意志力挑战成功的时候,你会不会告诉自己你已经很“好”了?当你屈服于拖延症或某种诱惑的时候,你会不会告诉自己你太“坏”了?
- 你会不会以自己的善行为借口,允许自己去做些坏事?这是无害的奖励,还是阻碍了你实现更长远的意志力目标?

深入剖析:你是在向明天赊账吗?

当你要作与意志力挑战有关的决定时,注意一下,你脑海中是否闪过了“未来再好好表现”的承诺。你是不是告诉自己,明天会弥补今天的过错?这对你当下的自控有什么影响?一直保持关注,从今天一直关注到明天。你是不是真的做到了你所说的?或者,“今天放纵,明天改变”的循环是不是又开始了?

意志力实验:明天和今天毫无区别

这一周就试着逐渐减少行为的变化性。把你今天作的每个决定都看成是对今后每天的承诺。
因此,不要问自己“我现在想不想吃这块糖?”,而要问自己“我想不想在一年里每天下午都吃一块糖?”或者,你明知道应该做一件事情却拖延不做时,不要问自己“我是想今天做还是明天做?”,而要问自己“我是不是想承担永远拖延下去的恶果?”

深入剖析:你正在被光环笼罩吗?

你会不会因为关注一个事物最有益的品质,而允许自己沉溺于它?有没有什么“神奇词语”会给你放纵的许可?比如“买一送一”、“全天然”、“淡”、“公平贸易”、“有机”或“为了慈善”。只关注每张收据结尾处写的“你节省了___!”,却忽略了自己总共花了多少钱。

当“光环效应”影响到你的意志力挑战时,你需要找到最具体的测量标准(比如卡路里、花费、消耗或浪费的时间),以此判断这个选择是否和你的目标相符。

这一周,看看你是否被那些破坏长远目标的光环所笼罩。

深入剖析:你觉得自己是谁?

当你思考自己的意志力考验时,你觉得哪部分的你像“真实”的你?是那个想追求目标的你,还是那个需要被控制的你?你是更认同自己的冲动和欲望,还是更认同自己的长期目标和价值观?当你想到你的意志力挑战时,你觉得自己是能成功的人吗?还是说,你觉得自己需要被彻底压抑、完善或改变?

意志力实验:取消许可,牢记理由。

如何关注对自己的承诺,而不是关注单纯的进步?当面对同一个诱惑时,回忆自己当时为什么拒绝了诱惑。这有助于帮助我们做出与自身目标相符的决定。

记住我们为什么会拒绝诱惑,这是个很有效的方法,一万年每当你面对自我放纵的诱惑时,记住这件事会改变我们的感觉。所谓的奖励看起来更像对于目标的威胁,屈服于诱惑的感觉并不好,记住理由还有助于你发现并抓住机遇以完成目标

下一回,当你发现自己在用曾经的善行为放纵辩护的时候,停下来想一想你做“好”事的原因,而不是你应不应该得到奖励(你当时为什么能拒绝诱惑)。

第五周:大脑的弥天大谎:为什么我们误把渴望当幸福?

深入剖析:是什么让你的多巴胺神经元不停燃烧?

多巴胺控制的是行动,而不是快乐。奖励的承诺保证了被试者成功地行动,从而获得奖励。当奖励系统活跃的时候,他们感受到的是期待,而不是快乐。
这一周,试着观察是什么吸引了你的注意力。是什么给了你奖励的承诺,强迫你去寻求满足感?是什么让你像巴甫洛夫的狗一样垂涎欲滴(如果在喂狗之前摇铃,狗即便没有看到食物,也会听到铃声就流口水。它们懂得把铃声和晚餐的承诺联系在一起。克努森作出了一个大胆的预测。他认为,大脑在期待奖励的时候也会“流口水”。),或是像奥尔兹和米尔纳的小白鼠一样欲罢不能?
虽然我们所处的世界总让我们产生欲望,但我们只要用心观察,就能看透一些东西。知道那是怎么一回事并不能完全消除你的欲望,但它能让你至少有机会抗争一下,锻炼一下“我不要”力量。

深入剖析:谁在控制你的多巴胺神经元?

让我们来观察一下,零售商和营销人员究竟是如何刺激奖励承诺的。把逛商店或看广告当做一种游戏。你闻到了什么?看到了什么?听到了什么?当你知道这些暗示都是经过精心设计,专门要诱惑你上钩的时候,你就能看清它们到底是什么,也就能成功抵御它们了。

意志力实验:为了你的“我愿意”挑战分泌多巴胺

人们一直以来都在用奖励承诺来克服癖好。学生通过使用音乐、时尚杂志和电视,让自己在做通常会推迟的任务时,产生更多多巴胺,帮助他们找到了解决办法,比如带上可怕的文书工作走进自己喜欢的咖啡厅,边喝热巧克力边完成工作,或是极富创意地买一堆刮刮乐彩票,把它们放在你想拖延的项目周围。

还有一些人想象自己努力工作后取得的最佳结果,让未来的奖励显得更加真实。如果有什么事让你觉得很不愉快,所以你总是拖延着不去做,你能不能把它和能让多巴胺神经元燃烧的事联系在一起,从而促使自己去做呢?

深入剖析:欲望的压力

大部分人会更关注对快乐的承诺,而不关注多巴胺刺激欲望时感觉到的不快乐。这一周,看看你能否发现渴望会引发压力和焦虑。如果你屈服于诱惑的话,你觉得这是自己对奖励承诺的反应?还是在缓解焦虑?

意志力实验:测试奖励的承诺

找一个常常让你放纵自己的诱惑因素,测试一下奖励的承诺。你之所以会受到诱惑,是因为大脑告诉你,你会很快乐。
学生们最常见的选择是零食、购物、电视和电子邮件、纸牌游戏等和网络相关的浪费时间的事情。请关注你放纵的过程,不要急着去体验。注意这种奖励的承诺给你什么感觉。期待、希望、兴奋、焦虑、流口水……你的大脑和身体感觉到了什么。然后,允许自己接受诱惑。和你的期望比起来,这种体验怎么样?奖励的承诺有没有消失?它是否仍然促使你吃得更多、花得更多、待得更久?什么时候你会感到满足?你是否达到了一种没法继续的程度,因为你太饱了、太累了、太沮丧了、没时间了,或是无法得到“奖励”了?

进行这项练习的人通常会有两种结果。一些人会发现,当他们真的关注放纵的感受时,他们实际上并不需要自己想象中那么多的东西。另外一些人发现,这种体验完全无法让他们满足。这就暴露了奖励的承诺和实际体验之间的差别。这两种观察都会让你对曾经无法控制的事有更强的自控力。

第六周:“那又如何”:情绪低落为何会使人屈服于诱惑?

情绪低落会使人屈服,而且经常是以令人吃惊的方式屈服。女性在感到焦虑或抑郁的时候,很有可能会去吃巧克力,但她们这一解压方法的唯一效果,就是带来更大的罪恶感。

深入剖析:缓解压力的承诺

当你感到压力、焦虑或心情低落的时候,你会怎么做呢?你生气时会不会更容易受到诱惑?你是不是会更难集中注意力,或更容易拖延呢?情绪低落是如何影响你的意志力挑战的?

意志力实验:尝试一种有效的解压方法

  • 最有效的解压方法包括:锻炼或参加体育活动、祈祷或参加宗教活动、阅读、听音乐、与家人朋友相处、按摩、外出散步、冥想或做瑜伽,以及培养有创意的爱好。
  • 最没效果的缓解压力的方法则包括:赌博、购物、抽烟、喝酒、暴饮暴食、玩游戏、上网 、花两小时以上看电视或电影。

有效和无效的策略最主要的区别是什么?真正能缓解压力的不是释放多巴胺或依赖奖励的承诺,而是增加大脑中改善情绪的化学物质。当我们面对压力时,大脑一再做出错误的预测,不知道什么才能让我们快乐。也就是说,我们经常阻止自己去做真正能带来快乐的事。下一回,当你面对压力,即将作出缓解压力的承诺时,可以考虑尝试一下更有效的解压方法。

思考:有没有什么东西能提醒面对压力的你?到底什么才能让你感到更快乐?在你感到压力之前,你能不能先想出一些鼓励自己的方法?

深入剖析:是什么吓到了你?

这一周,请注意观察什么事情会引发你大脑里的“恐惧管理”。是你在媒体或网络上听到或看到的东西吗?你会在社区运动场上感染新型食肉细菌吗?非洲杀人蜂这次会从哪里飞过来?哪栋大楼被炸了?哪里发生了致命车祸?谁惨死在家中?(如果你想再多学点东西的话,还可以看看商家怎么利用你的恐惧宣传他们的产品。它们和你的意志力挑战有关系吗?)别人还可能怎么利用你的恐惧,让你产生对安慰的渴望?                 

请花上24个小时,远离那些会让你产生恐惧的电视新闻、访谈节目、杂志或网页。如果你觉得自己不关注那些正在发生的大事小事,世界末日也不会降临的话,就请别在这些媒体上毫无意义地消磨时光了。

深入剖析:遇到挫折时

这一周,请特别留意你是如何应对意志力失效的

你会责备自己,告诉自己你永远不会改变吗?你会觉得这样的挫折暴露了你的问题——懒惰、愚蠢、贪婪或无能吗?你会感到绝望、罪恶、羞愧、愤怒或不知所措吗?你会以挫折为借口,更加放纵自己吗?

意志力实验:失败的时候,请原谅自己

每个人都会犯错误,都会遭遇挫折。我们总是倾向于相信自我怀疑和自我批评,但这并不会让我们离目标更近。实际上,我们可以尝试从良师益友的角度来看待问题。他们都信任你、想要你变得更好、愿意在你失意的时候鼓励你,你也可以这么做。既然失败无法避免,更重要的就是我们如何应对失败,以下是心理学家提供的一些方法:

  1. 你感觉如何?当你想到挫折时,花一点时间关注并描述你此刻的感觉。你现在情绪如何?你有什么感觉?你是否记得自己失败后的第一感觉?你会怎样描述那种感觉?注意一下那种感觉是不是自我责备。如果是的话,你对自己说了什么?自知的视角让你看清自己的感受,而且不会急于逃避。
  2. 你只是个凡人。每个人都会遇到意志力挑战,每个人都有失去自控的时候。这只是人性的组成部分,挫折并不意味着你本身有问题。想一想这些说法是不是真的。你能想象你尊敬、关心的其他人也经历过同样的抗争和挫折吗?这个视角会让自我批评和自我怀疑的声音变得不那么尖锐。
  3. 你会跟朋友说什么?想一想,如果你的好朋友经历了同样的挫折,你会怎么安慰他?你会说哪些鼓励的话?你会如何鼓励他继续追求自己的目标?这个视角会为你指明重归正途之路。

深入剖析:决定改善心情

请花一点时间,仔细想一想你改变自己的动力和期望。你只有在情绪低落时才会有动力改变吗?想象成功改变生活时的快乐,是不是你作出改变的唯一动力?你会通过幻想未来的自己来改善现在的心情,而不是采取实际行动改善自己的行为吗?

意志力实验:乐观的悲观主义者更可能成功

乐观给我们动力,但少许的悲观能帮我们走向成功。研究发现,如果能预测自己什么时候、会如何受到诱惑和违背承诺,你就更有可能拥有坚定的决心。

想一想你自己的意志力挑战,请扪心自问:我什么时候最可能受到诱惑并放弃抗争?什么东西最可能分散我的注意力?当我允许自己拖延的时候,我会怎样劝说自己?当你头脑中出现这样的情景时,想象自己真的处在这样的情景中,你会有什么感觉?会想到什么?让你自己看一看典型的意志力失效是怎么发生的。

然后,把想象中的意志力失效变成现实中的意志力成功。想一想你要采取哪些具体行动来坚定自己的决心。你需要回忆一下自己的动力吗?需要远离诱惑吗?需要找朋友帮忙吗?需要用你学过的其他意志力策略吗?当你头脑中有了一个具体策略后,想象一下你正在这样做,再想象一下这会有什么感觉。想象自己成功了,让这种想象给你自信,相信自己为了完成目标会不惜一切。

用这种方法预见失败其实是一种自我同情的方式,而不是自我怀疑的方式。当你真的受到诱惑的时候,你就能有所准备,能将自己的计划付诸实践。

第七周:出售未来:及时享乐的经济学

“延迟折扣”:等待奖励的时间越长,奖励对你来说价值越低。很小的延迟就能大幅降低你感知到的价值。加上2分钟的延迟,6颗巧克力豆还比不上2颗能马上获得的巧克力豆。随着巧克力豆离我们越来越远,每颗巧克力豆的价值都缩水了。解释了为什么我们宁愿放弃未来的幸福,也要选择即刻的快感。

深入剖析:你给未来的奖励打了几折?

对你的意志力挑战来说,当你屈服于诱惑或拖延的时候,你是把哪些未来的奖励出售了?放弃抗争的即时回报是什么?长期的代价是什么?这是公平交易吗?如果理性的你说“不,那是个叫人讨厌的买卖”,那么,请你试着去捕捉自己改变选择的时刻。是什么想法和感觉让你出售了未来?

意志力实验:等待10分钟

想获得一个冷静明智的头脑,我们就需要在所有诱惑面前安排10分钟的等待时间。如果10分钟后你仍旧想要,你就可以拥有它。但在10分钟之内,你一定要时刻想着长远的奖励,以此抵抗诱惑。如果可以的话,你也可以创造一些物理上(或视觉上)的距离。

如果你的意志力挑战需要“我要做”的力量,

你仍旧可以使用这个“10分钟法则”,以此来克服诱惑和拖延。你可以把法则改成“坚持做10分钟,然后就可以放弃”。当10分钟结束后,你就可以允许自己停下来。不过你会发现,只要一开始,你就会想继续做下去。

意志力实验:降低你的折扣率

幸运的是,一个人的折扣率不是始终不变的物理法则。通过改变自己对选择的看法,我们就能降低折扣率.当人们首先想到未来的奖励时,未来奖励的折扣率就会大幅下降。无论面对什么样的诱惑,你都可以利用以下方式抵抗即时的满足感。

  1. 当你受到诱惑要做与长期利益相悖的事时,请想象一下,这个选择就意味着,你为了即时的满足感放弃了更好的长期奖励。
  2. 想象你已经得到了长期的奖励。想象未来的你正在享受自控的成果。
  3. 然后扪心自问:你愿意放弃它,来换取正在诱惑你的短暂快感吗?

意志力实验:对未来的自己作预先承诺

你准备好对未来受诱惑的自己施加压力了吗?这一周,为未来某一刻的自己作出承诺。从以下策略中挑选一个,在你的意志力挑战中用上它。

  1. 作好拒绝诱惑的准备。在未来的自我被诱惑蒙蔽之前,提前作出选择。比如,你可以在饿得对外卖菜单流口水之前,先打包一份健康午餐。无论是个人锻炼还是看牙医,你都可以作好计划并预先付款。为了未来的自己按理性偏好行事时更容易些,你能为意志力挑战做些什么?
  2. 让改变偏好变得更难。就像科尔蒂斯“破釜沉舟”一样,不要让自己轻易屈服于诱惑。在家里或办公室里摆脱诱惑。当你购物的时候,不要带信用卡,只带你想花掉的现金。把闹钟放在房间的另一端,你想要关闹钟就必须起床。这些做法都不能保证你绝对不会改变想法,但至少能让作出改变变得很困难。当你受到诱惑的时候,你能不能制造延迟或设置障碍,给自己一些时间来应对诱惑?
  3. 激励未来的自己。如果你在用胡萝卜或大棒督促自己获得健康和快乐,那么你不用觉得羞愧。人们向未来的自己预先作出承诺,从而实现改变。找一个方法,让你得到即时快感时付出更大的代价。你可以给即时的奖励“加税”,比如告诉自己会增加体重,或在没完成预定目标时向慈善机构捐款。奖励的价值可能没有变化,但屈服的代价会让即时的快感显得不再诱人。

深入剖析:你在等待未来的自己吗?

你是否在推迟重要的变化或任务,等待自控力更强的未来的自己出现?你是不是乐观地让自己承担过多的责任,最后却被不可能的任务打倒了?你今天有没有不去做什么事,因为明天你会更想去做那件事?

意志力实验:遇见未来的自己

  1. 创造一个未来的记忆。想象未来可以让人延迟满足感。你甚至不需要去想延迟满足感带给未来的回报,只要设想一下未来就行。比如,如果你正面临一个抉择,是现在就开始一个项目,还是推迟一下再开始,那么,想象一下你下周在杂货店里购物,或者想象一下你正在开预定的会议。当你想象未来的图景时,大脑就会更具体、更直接地思考你现在选择的结果。你想象的未来图景越真实、越生动,你做的决定就越不会让你在未来后悔。
  2. 给未来的自己发条信息。选择未来的某个时间点,把这些邮件发出去。为什么不利用这个机会想一想未来的自己在做什么,他们会如何看待自己现在作出的选择呢?向未来的自己描述一下自己现在将要做什么,有助于你实现长期目标。你对未来的自己有什么希望?你觉得自己会变成什么样?你也可以想象未来的自己回头看现在的自己。未来的自己会因为现在的自己做了什么而表示感激?
  3. 想象一下未来的自己。研究发现,想象未来的自己能增强你现在的意志力。在一个实验中,宅男宅女们需要想象两个未来的自己。第一个是他们希望成为的自己。那个人能坚持锻炼,身体健康,充满能量。第二个是他们害怕成为的自己。那个人懒散度日,毫无活力,体弱多病。这两种想象都能让他们离开椅子,和没有想象未来自己的对照组相比,这些人在两个月后提高了锻炼频率。在你的意志力挑战中,你能想象一个你希望成为的自己,一个能承诺改变并获得成果的自己吗?或者,你能想象一个背负不改变带来的恶果的自己吗?让你的白日梦做得更生动,更有细节。想象一下你会有什么样的感觉,你看上去会是什么样的,你会对过去的选择有什么感觉。你是会感到自豪、心怀感激,还是会后悔不迭?

深入剖析:为了你自己好,你是不是太“高瞻远瞩”了?

你是否有过这样的感觉:因为总有更多的事情要做,似乎没办法放下工作休息一下?你是否对花钱产生了太多的罪恶感和焦虑感,以至于除了购买生活必需品,你觉得自己很难再去买别的东西?你有没有回头看过,自己是怎样花费时间和金钱的?你会不会希望当时你能更关注即时的快乐,而不是总去推迟享受?如果是这样的话,试一试本章提到的意志力实验,把它们当做放纵自己的方法。(别再试着推迟了,好不好?)

第八周:传染:为什么意志力会传染?

深入剖析:你的社交

不是每个意志力挑战都是社会“传染”的结果,但大多数挑战都存在社会“传染”的问题。针对你自己的意志力挑战,请考虑以下问题:

  • 在你的社交圈中,有没有其他人有和你一样的意志力挑战?
  • 回想一下,你有没有从朋友或家人身上学到过某种习惯?
  • 和某些人在一起的时候,你会不会更容易放纵自己?
  • 在你的社交圈中,最近有没有其他人也在尝试应对这个意志力问题?

深入剖析:你在模仿谁?

这一周,仔细观察你是否在模仿别人的行为,尤其是和你的意志力挑战有关的行为。同样放纵自己的行为是不是维持关系的社会黏合剂?当看到周围的人在做同样的事时,你会不会变本加厉地去做这件事?

马克最近找了个新工作,在咖啡店里做服务员。咖啡店每4个小时换一次班,员工能休息10分钟。马克很快发现,休息时大多数人会去后院抽烟。换班结束的时候,大家通常是从后院走进来的。回家前,大家也是边聊天边抽烟。马克平时不太抽烟,不过聚会时偶尔会抽一两根。他发现,自己休息的时候,如果其他服务员也在后院,他就会抽烟。有时候下班后,他也会和同事们在一起抽烟。

意志力实验:增强你的免疫系统

我们不总是感染别人的目标。有时,看着别人屈服于诱惑,反而能增强我们的自控力。当你坚定了一个目标时(比如减肥),还要意识到你有一个与之冲突的目标(比如吃个比萨)。当你看到别人的行为和自己最大的目标发生冲突时,你的大脑就会处于高度警惕的状态。它会让你的主要目标更坚定,它还会寻找策略帮你坚守目标。心理学家把这叫做“反抗控制”。但当你的自控力受威胁时,你可以把它看做一种免疫反应。

当你面对别人的目标时,增强免疫系统的最佳途径就是:在每天刚开始的时候花几分钟想想自己的目标,想想你会怎么受到诱惑,想要改变自己的目标。这就像疫苗一样,能保护你不受别人的感染。回想自己的目标能强化这个目标,避免你感染他人的目标。

意志力实验:感染自控力

研究发现,想到自控力强的人可以增强自己的意志力。对你的挑战来说,谁能成为你的意志力榜样呢?是那些经历过同样的挑战并最终成功的人,还是那些自控力的典范?(在我的班上,最常被提名的意志力模范是成功的运动员、精神领袖和政治家。但实际上,家人和朋友能给予我们更多的动力。我们接下来就会发现这个问题。)当你需要多一点意志力的时候,想想你的榜样。问问自己:那个意志力强人会怎么做?

深入剖析:你最可能被谁感染?

花一点时间去想一想,谁是和你关系密切的人。你和谁在一起的时间最长?你最尊重谁?你觉得谁和自己最像?谁的意见对你来说最重要?你最信任谁,最关心谁?你能不能想到哪些行为(无论是有益的还是有害的)是你从他们身上学来的,或是他们从你身上学到的?

深入剖析:可别人都这么做!

如果我们认为别人还在做我们试图改掉的不良行为,那么“社会认同”就会妨碍我们作出改变。你有没有告诉过自己,你的意志力挑战不是什么大事,因为它是社会规范?你是否意识到,自己认识的所有人都有同样的习惯?如果是这样,你可能会质疑这种看法。质疑它的最好方法就是找到一群人,他们正在做你渴望做到的事。找到一个新的“群体”并加入进去。这个“群体”可能是一个支援小组、一个班级、一个本地俱乐部、一个网络社区,甚至是一份支持你实现目标的杂志。置身于和你共享承诺与目标的人们当中,会让你觉得自己的目标才是社会规范

意志力实验:自豪的力量

想象一下你在意志力挑战中取得成功后会多么自豪。这样,你就能充分利用“被认可”这个人类的基本需求。想一想你所在“群体”中的某个人,可以是一个家庭成员、一个朋友、一个同事、一个老师。想象他们的观点与你相符,或者他们会为了你的成功感到高兴。当你作出一个让自己感到自豪的选择时,你可以更新Facebook的个人状态,或是在Twitter上发布信息。如果你不喜欢高科技产品,你也可以和人们面对面地分享自己的故事。

意志力实验:把它变成集体项目

你无须单独面对你的意志力挑战。有没有朋友、家人或同事可以和你一起实现意志力目标?你们不必有相同的目标,只需要相互记录和鼓励。这就能让你们在自控时感到来自社会的支持。如果你愿意把这种支持变成一种良性竞争,你也可以在意志力竞争中赢过别人。看看谁会最先完成被延误的任务,看看谁在一个月里节省的钱最多。

第九周:“我不要”力量的局限性

正如我们所见,越是不让我们想一件事,我们就会越去想它。对焦虑、沮丧、节食、上瘾的最新调查证实,把“我不要”的力量用在涉及思想、情感的内心世界,它就会失效。当深入内心世界时,我们会发现,我们需要给自控一个全新的定义,给放弃自控留出一点空间来。

当人们试着不去想某件事时,反而会比没有控制自己的思维时想得更多,比自己有意去想的时候还要多。这个效应在人处于紧张、疲劳或烦乱状态时最为严重。韦格纳把这个效应称为“讽刺性反弹”.“讽刺性反弹”可以解释了现代人的很多失败事例:失眠患者越想入睡,就发现自己越清醒;减肥的人拒绝碳水化合物,却梦到了沃登面包和澳洲坚果曲奇;忧心忡忡的人试图摆脱焦虑,却一次又一次陷入对灾难的幻想。

深入剖析:讽刺性反弹调查

你是否想忘记某些东西?如果是,请检验一下讽刺性反弹理论。压抑有用吗?试图忘记某些东西是否让它回来时变得更强烈?(没错,你要让“监控”来监控它自己。)

意志力实验:忠于你的感受,但别相信你所有的想法

关注自己的想法,而不是试着转移注意力。通常情况下,最让人心烦的事都很相似——同样的担忧、同样的自我批评、同样的不堪回首。“如果出了问题怎么办?”“我真不相信我做了那个,我真笨!”“要是那件事没发生,我会做成某件事吗?”这些想法会像脑海里的歌曲一样突然出现。

它们都不是你需要相信的重要信息!接下来,把注意力转移到你的身体感受上,看看你是否会感觉紧张,心率或呼吸是否有变化,看看你的肠胃、胸腔、咽喉或其他身体部位是否有感觉。一旦观察到这些想法和感觉,就把注意力转移到呼吸上。感觉一下你是怎么吸气、呼气的。有时候,这些烦心的想法和感觉会随着呼吸自然消散。其他时候,它们将不停打断你对呼吸的关注。如果出现了这种情况,就把这些想法和感觉想象成飘过脑海和身体的浮云。不要停下呼吸,想象这些浮云不断消散或飘过。把呼吸想象成一阵风,它毫不费力地将这些浮云吹散、吹走。你无须让这些想法离开,只需保持呼吸的感觉。

注意,这种方法和相信或思考某个想法是不同的。不要抑制想法,接受它的存在,但不要相信它。你要接受的想法是:这些想法总是来来去去,你无法控制会出现什么想法,但你不必接受它的内容。换言之,你可以对自己说:“好吧,那种想法又来了,又得心烦。不过,这就是思维的运作方式,它并不一定意味着什么。”但不要对自己说:“好吧,我想这是真的。我真是个糟糕的人,糟糕的事会发生在我身上,我想我要接受这一点。”

同样的方法也可以用于应对使人分心或心烦意乱的各种情绪,比如愤怒、嫉妒、焦虑或羞愧。在多次尝试这种方法后,比较一下这么做的结果和努力摆脱心烦想法和情绪得到的结果,看看哪种方法更能给你带来内心的平静?无论是拖延症患者想摆脱焦虑,还是酗酒者想避免孤独,摆脱不好的感觉往往会导致自我毁灭的行为。挑战一下你的意志力,有没有什么你不想体验的感觉?如果你允许自己去体验,调节呼吸并想象浮云,会发生什么事?

深入剖析:你最渴望什么?

科学研究表明,当我们自我抑制,禁食一种食物时,我们反而会对它有难以抑制的欲望。你是否有这样的体验呢?你试过通过不吃一系列食物或你最喜欢的零食来减肥吗?如果你试过,你坚持了多久?你最后坚持下去了吗?你现在禁食什么东西吗?如果有,禁食是不是使你更渴望这些东西呢?如果你没有节食过,你是否曾经被禁止做什么事呢?被禁止做某件事会消除你对它的欲望,还是会激起你更大的渴望?

意志力实验:直面自身欲望,但不要付诸行动

在好时巧克力实验中,实验组织者告诉那些知道“白熊”现象和“反弹”理论的学生,在接下来一周里可以用以下4个步骤来应对自己强烈的欲望。这些欲望可以是巧克力、卡布奇诺咖啡或不停查收电子邮件。

  1. 承认自己脑海中的欲望,以及渴望某种事物的感觉。
  2. 不要马上试着转移注意力或与之争论。接受这种想法或感觉,提醒自己“白熊”现象和“反弹”理论。
  3. 退一步考虑,意识到这种想法和感觉并不受你控制,但你可以选择是否将这些想法付诸实践。
  4. 记住你的目标,提醒自己预先作出的承诺。正如那些学生会提醒自己,他们答应过不偷吃巧克力。

意志力实验:把“我不要”变成“我想要”

当你面对“我不要”的巨大意志力挑战时,可以试着采取以下策略。

除了“我不要”,你还能做什么来满足同样的需求?许多坏习惯都是为了满足一定的需求而形成的,这些需求可能是减少压力、获得愉悦,也可能是寻求认同。你可以关注这些需求,用有同样效果的健康的新习惯来戒掉坏习惯。我的一位学生想戒咖啡,所以就用喝茶来代替喝咖啡。茶和咖啡有几乎相同的作用,能给你休息的机会,能提神,能端着到处跑,而且不用摄入那么多咖啡因。

如果没有了坏习惯,你还能做些什么?你可以做其他有趣的事来代替坏习惯。大多数的癖好和消遣需要从生活的其他部分抽调大量时间和精力。有时,关注错失的机会比试着戒掉坏习惯更有激励作用。我的一位学生是电视真人秀的发烧友。但当她为自己设定了“提高厨艺”的目标时,她就成功关掉了电视,并把更多时间放在琢磨厨艺上。(她成功的第一步就是用厨艺节目代替真人秀,接着从沙发上移动到厨房里进行实践。)

可以通过重新定义“我不要”的挑战,把它变成“我想要”的挑战吗?有时,同样的行为会被两种截然不同的思想支配。举个例子来说,我的一位学生把“不要迟到”重新定义为“做第一个到的人”或“提前5分钟到”。这或许听起来没有太大的不同,但他发现,自己变得更有动力了,也没那么容易迟到了。因为,他把“按时到达”变成了一场他能获胜的比赛。如果你关注自己想做什么,而不是自己不想做什么,你就可以避免“反弹”效应带来的危害。

如果你想做这个实验,请先花一周时间来关注你想做什么,而不是你不想做什么。在这周的最后,想一想你在旧的“我不要”挑战和新的“我想要”挑战中分别表现如何。

意志力实验:驾驭冲动

无论你对什么上瘾,“驾驭冲动”的技巧都能帮你抵抗诱惑,而不是屈服于它。当冲动占据你的头脑时,花至少一分钟去感觉自己的身体。你的冲动是什么样的?是热的还是冷的?身体有没有感到不舒服?心率、呼吸或内脏有什么变化?保持这个状态至少一分钟。看看这些感觉在强度或特性上有什么变化。就像小孩子发脾气的时候一样,拒绝按照自己的冲动行事,有时会增加一个人的紧张程度。试着接受这些感觉,而不是试图否认它们。当你使用“驾驭冲动”的技巧时,呼吸是很有帮助的。你可以去感觉呼吸,体验吸入和呼出每一口气时的感觉,在此过程中了解自己的冲动。

当你第一次采用这个策略时,你可能一时驾驭住了冲动,但后来又故态复萌。在鲍文的吸烟研究中,每个人走出“刑讯室”后都马上抽起了烟。如果你在最初几次尝试中失败了,别灰心,这并不意味着这种方法是无效的。“驾驭冲动”和其他自控的新方法一样,都需要时间。你是否想在冲动来临之前就使用这项技巧?你可以正襟危坐,看看自己什么时候产生了冲动,想要抓鼻子、跷个腿或动一下。用同样的方法来驾驭这时的冲动,去感受它,但不要随冲动行事

写在最后的话

出于科学探索的精神,每回“意志力科学”课程结束的时候,我都会问学生们,在他们观察到的事情和尝试过的实验里,什么给他们留下了最深刻的印象。最近,我的一位科学家朋友建议我说,谈及科学的书最合适的结语莫过于——得出你自己的结论。所以,即便我很想写一段最后的总结,我还是要训练一下“我不要”的力量。我只向大家提出以下几个问题:

  • 你对意志力和自控力的想法是否有所改变?
  • 你认为哪个意志力实验对你最有帮助?
  • 你看到哪一页的时候最吃惊?
  • 你从这本书里学到了什么?

在未来的人生道路上,请保持科学家的心态。尝试新鲜事物,收集自己的数据,根据证据作出判断。对出人意料的想法保持开放的心态,从失败和成功中汲取经验教训。坚持有效的方法,和他人分享你了解的知识。面对复杂的人性和现代社会的诱惑,我们最好能做到这几点。但是,如果我们能保持好奇心和自我同情,那对付它们就绰绰有余了。

人是不断思考成长的

引子:

和一个朋友聊天,说到为什么一直没谈恋爱。然后了解到她不想找同龄的男生,因为同龄的男生大多数都不够成熟,她不想又做恋人又做妈妈,教一个小男孩怎么成熟怎样长大。这样太累,也走不远。

如遭雷击,然后想起来一本小说里有一个类似的对话:

问:“XX,其实喜欢你的追求者当中还是有好孩子的,为什么不接受?”

答:“我知道他们喜欢我什么,但我不想做花瓶,被谁摆在家里当摆设,更不想又做恋人又做妈妈,教一个小男孩怎么成熟怎样长大。”

这算是一个新时代优秀独立女性的自述?


正题:

突然明白为什么总是会阶段性的颓唐,因为自己定下的小目标总是做不到,因为总是做一些自己明知道不该做的事情把定下的事情抛诸脑后,因为其实自己还在学着长大成熟。

原来一直没有遇到一个真的把做的每一件事情都上升到战术,战略层面来,即使是玩游戏/运动别人抱着娱乐的心态,他从来不是。一个清晰可量化的指标,用变态的执行力,不把时间浪费无用之处。这样的人定下的目标永远会比其他的人更快完成。现实中是真有这样的人存在的。

有时候在怎么学习上花了太多时间,而不是在学习上花同样甚至更多的时间, 这样是不正确的。

吾日三省吾身,尽快的调整目前一个人的生活学习状态,思考事情的处理方式,把握好自己心脑海中的想法,坚定向前。

想要得到一件东西就必须付出相应的努力。想得到什么应该只有自己知道。

克制、坚持。

不断修行到坚硬

2016/10/30

http 模块

一个网站的加载流程粗略的流程大概如下:

  1. 用户通过浏览器发送一个http的请求到指定的主机
  2. 服务器接收到该请求,对该请求进行分析和处理
  3. 服务器处理完成以后,返回对应的数据到用户机器
  4. 浏览器接收服务器返回的数据,并根据接收到的进行分析和处理

最简单的web服务器

我们需要搭建一个 http 的服务器,用于处理用户发送的 http 请求,在 node 中有 http 核心模块可以在很简单的几句话就帮我们启动一个服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 导入http模块:
var http = require('http');
// 创建http server,并传入回调函数:
var server = http.createServer(function (request, response) {
// 回调函数接收request和response对象,
console.log('有客户端请求了.....');
// 将HTTP响应200写入response, 同时设置Content-Type: text/html:
response.writeHead(200, {'Content-Type': 'text/html'});
// 将HTTP响应的HTML内容写入response:
response.write('<h1>hello World!</h1>');
response.end();
});
// 让服务器监听8888端口:
server.listen(8888);
console.log('Server is running at http://127.0.0.1:8888/');

就这几行代码,我们就搭建了一个简单服务器,当我们将其运行,访问地址能在浏览器中显示我们熟悉的 hello World!,迈出了第一步。

下面我们来看看几个重要的地方:

核心方法

创建与监听

首先我们来看创建http server的代码:

  • var server = http.createServer([requestListener]) :创建并返回一个HTTP服务器对象
  • requestListener : 监听到客户端连接的回调函数
    在这里可以看到我们的回调函数是可选的,我们还可以使用事件监听器来进行,监听到客户端连接之后的操作,如:
    server.on('request', function(req, res) {// do ....})
    我们要在用户访问时做一些什么,都会在这里。

再看监听端口的代码,在这里我们只是简单的写了一下监听的端口,它的可选项都没有去设置

  • server.listen(port, [hostname], [backlog], [callback]) :监听客户端连接请求,只有当调用了 listen 方法以后,服务器才开始工作
    • port : 监听的端口
    • hostname : 主机名(IP/域名),可选
    • backlog : 连接等待队列的最大长度,可选
    • callback : 调用listen方法并成功开启监听以后,会触发一个 listening事件,callback将作为该事件的执行函数,可选

看完了创建与监听的方法,我们再看看看,我们在监听到客户端连接的回调函数 server.on('request', function(req, res) {// do ....}) 中看到有两个参数 request 和 response ,
在这两个参数中,我们可以去获得用户的当前请求一些信息,比如头信息,数据等待,还可以向该次请求的客户端输出返回响应,下面我们一起看看它里面的内容

request 对象

参数request对象是 http.IncomingMessage 的一个实例,通过它 ,我们可以获取到这次请求的一些信息,比如头信息,数据,url参数等等
这里简单的列一下最常见的:

  • httpVersion: 使用的http协议的版本
  • headers : 请求头信息中的数据
  • url : 请求的地址
  • method : 请求方式

response 对象

参数 response对象是 http.ServerResponse(这是一个由HTTP服务器内部创建的对象) 的一个实例,通过它 我们可以向该次请求的客户端输出返回响应。

  • response.writeHead(statusCode, [reasonPhrase], [headers]):向请求回复响应头,这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用。
    • statusCode: 一个三位数的HTTP状态码, 例如 404
    • reasonPhrase:自行设置http响应状态码对应的原因短语
    • headers:响应头的内容
  • write(chunk, [encoding]) : 发送一个数据块到响应正文中 ,如果这个方法被调用但是 response.writeHead() 没有被调用,
    它将切换到默认header模式并更新默认的headers。chunk可以是字符串或者缓存。如果chunk 是一个字符串,
    第二个参数表明如何将这个字符串编码为一个比特流。默认的 encoding是’utf8’。
  • end([data], [encoding]): 当所有的正文和头信息发送完成以后,调用该方法告诉服务器数据已经全部发送完成了。
    这个方法在每次完成信息发送以后必须调用,并且是最后调用,如果指定了参数 data , 就相当于先调用response.write(data, encoding)之后再调用 response.end()
  • setHeader(name, value) : 为默认或者已存在的头设置一条单独的头信息:如果这个头已经存在于 将被送出的头中,将会覆盖原来的内容。如果我想设置更多的头, 就使用一个相同名字的字符串数组
    如:response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);

看了那么多api,是时候实践一把了,我们再来对原来的代码进行一点改造~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 导入http模块,url 模块
var http = require('http');
var url = require('url')
// 创建http server
var server = http.createServer();
server.on('request', function (req, res) {
// 将HTTP响应200写入response, 同时设置Content-Type: text/html:
res.writeHead(200, {
'Content-Type': 'text/html'
});
var urlObj = url.parse(req.url);
//根据用户访问的url不同展示不同的页面
switch (urlObj.pathname){
// 这是首页
case '/':
res.write('<h1>这是里首页</h1>');
break;
case '/user':
res.write('<h1>这里是个人中心</h1>');
break;
default :
res.write('<h1>你要找的页面不见了~</h1>');
break;
}
// 将HTTP响应的HTML内容写入response:
res.end();
});
server.listen(8888);
console.log('Server is running at http://127.0.0.1:8888/');

启动一下该js文件,并且通过不同的url不同的后缀,如 //user 去访问这个地址,看看浏览器的输出,应该已经变了。

这就是通过简单的的url处理,来实现的路由机制拉~

url 处理响应不同 html

当然这里我们再继续深入一下!结合 node 的文件系统(fs模块),使不同的url,直接读取不同的 html 文件,示例:

准备工作: 在当前文件目录下建立html文件夹, 并且新增文件 index.htmluser.html,内容自行发挥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var http = require('http');
var url = require('url');
var fs = require('fs');

var server = http.createServer();
// 读取我们当前文件所在的目录下的 html 文件夹
var HtmlDir = __dirname + '/html/';
server.on('request', function(req, res) {
var urlObj = url.parse(req.url);
switch (urlObj.pathname) {
case '/':
//首页
sendData(HtmlDir + 'index.html', req, res);
break;
case '/user':
//用户首页
sendData(HtmlDir + 'user.html', req, res);
break;
default:
//处理其他情况
sendData(HtmlDir + 'err.html', req, res);
break;
}
});

/**
* 读取html文件,响应数据,发送给浏览器
* @param {String} file 文件路径
* @param {Object} req request
* @param {Object} res response 对象
*/
function sendData(file, req, res) {
fs.readFile(file, function(err, data) {
if (err) {
res.writeHead(404, {
'content-type': 'text/html;charset=utf-8'
});
res.end('<h1>你要找的页面不见了~</h1>');
} else {
res.writeHead(200, {
'content-type': 'text/html;charset=utf-8'
});
res.end(data);
}

});
}
server.listen(8888);
console.log('Server is running at http://127.0.0.1:8888/');

运行文件,切换url,程序会将不同的页面返回。大家自己去试试吧!

这是对于 node 的 http模块 的学习,理解有限,如果有错误之处,请指出,谢谢!

本文地址://guowenfh.github.io/2016/10/15/node-http/

node 文件系统

该模块是核心模块,需要使用 require 导入后使用

底层方法

  1. fs.open(path, flags, [mode], callback):异步版的文件读取
    • path: 要打开的文件的路径
    • flags: 打开文件的方式 读/写,12种不同方式?
    • mode: 设置文件的模式 前提是这个文件是已存在的,读/写/执行 4/2/1
    • callback: 回调
      • err : 文件打开失败的错误保存在err里面,如果成功err为null
      • fd : 被打开文件的标识,和定时器
  2. fs.openSync(path, flags, [mode]):fs.open() 的同步版,返回值为 fd
  3. fs.read(fd, buffer, offset, length, position, callback):从指定的文档标识符 fd 读取文件数据。
    • fd: 通过open方法成功打开一个文件返回的编号
    • buffer: buffer对象, 缓冲区,数据将会写入这里。
    • offset: 新的内容添加到buffer中的起始位置,向缓冲区 buffer 写入的偏移量。
    • length: 添加到buffer中内容的长度
    • position:读取的文件中的起始位置,为null,将会从文件当前的位置读取数据。
    • callback: 回调
      • err:错误
      • bytesRead:buffer的长度,读取的字节
      • buffer: buffer对象
  4. fs.readSync(fd, buffer, offset, length, position):fs.read()的同步版,返回 bytesRead
  5. fs.write(fd, buffer, offset, length[, position], callback):通过文件标识fd,向指定的文件中写入buffer通过文件标识fd,向指定的文件中写入buffer.
    /fs.write(fd, data[, position[, encoding]], callback):通过指定的fd把data写入到文档中.
    • fd: 打开的文件标识
    • buffer : 要写入的数据
    • offset : buffer对象中要写入的数据的起始位置
    • length : 要写入的buffer数据的长度
    • data: 如果data不是buffer对象的实例则会把值强制转化成一个字符串。
    • position: 是参考当前文档光标的位置,然后从该处写入数据。
    • encoding: 是预期得到一个字符串编码
    • callback:回调函数 (err, written, string)
  6. fs.writeSync(fd, buffer, offset, length[, position])/fs.writeSync(fd, data[, position[, encoding]])
  7. fs.close(fd, callback):关闭一个打开的文件
  8. fs.closeSync(fd): fs.close() 的同步版本

更易用的方法

  1. fs.writeFlie(filename, data, [options], callback):
    异步的将数据写入一个文件,如果文件不存在则新建, 如果文件原先存在,会被替换。
    • filename : 文件路径,
    • data : data 可以是一个string,也可以是一个原生buffer。
    • options : 选项
      • encoding :文件编码default = ‘utf8’
      • mode : default = 438 (aka 0666 in Octal)
      • flag : default = ‘a’
    • callback : 回调函数
  2. fs.writeFileSync(filename, data, [options]):fs.writeFile的同步版本。
  3. fs.appendFile(filename, data, [options], callback):异步的将数据添加到一个文件的尾部,如果文件不存在,会创建一个新的文件。
    • filename : 文件路径,
    • data : data 可以是一个string,也可以是一个原生buffer。
    • options : 选项
      • encoding :文件编码default = ‘utf8’
      • mode : default = 438 (aka 0666 in Octal)
      • flag : default = ‘a’
    • callback : 回调函数
  4. fs.appendFileSync(filename, data, [options]):fs.appendFile的同步版本。
  5. fs.exists(path, callback):检查指定路径的文件或者目录是否存在。
    • path:路径
    • callback: callback 传入的参数指明存在 (true) 或者不存在 (false).
  6. fs.existsSync(path):fs.exists 函数的同步版。
  7. fs.readFile(filename, [options], callback):异步读取一个文件的全部内容
    • filename:文件路径
    • options:
      • encoding: default = null,如果未指定编码方式,原生buffer就会被返回。
      • flag: default = ‘r’
    • callback :(err, data), data 就是文件的内容
  8. fs.readFileSync(filename, [options]):fs.readFile的同步版本。 返回文件名为 filename 的文件内容。
  9. fs.unlink(path, callback):删除一个文件,回调函数(callback)只接受一个参数:可能出现的异常信息.
  10. fs.unlinkSync(path):fs.unlink(): 的同步版本
  11. fs.rename(oldPath, newPath, callback):异步版本的重命名函数.完成时的回调函数(callback)只接受一个参数:可能出现的异常信息.
  12. fs.renameSync(oldPath, newPath):fs.rename() 的同步版本
  13. fs.stat(path, callback):读取文件的状态信息,callback,接收两个参数: (err, stats) ,其中 stats 是一个 fs.Stats 对象。
  14. fs.statSync(path, callback):fs.stat() 的同步版本,返回一个 fs.Stats 实例。
  15. fs.watch(filename, [options], [callback]):观察指定路径的改变,filename 路径可以是文件或者目录。
    回调函数得到两个参数 (event, filename)。其中 event 是 ‘rename’(重命名)或者 ‘change’(改变),而 filename 则是触发事件的文件名。

文件夹处理

  1. fs.mkdir(path, [mode], callback) :创建文件夹,回调函数只接受一个参数:可能出现的异常信息。---》fs.mkdirSync(path, [mode])同步版
  2. fs.rmkdir(path, callback):删除文件夹,回调函数只接受一个参数:可能出现的异常信息。---》fs.rmdirSync(path)同步版
  3. fs.readdir(path, callback):读取 path 路径所在文件夹的内容。
    回调函数 (callback) 接受两个参数 (err, files) 其中 files 是一个存储目录中所包含的文件名称的数组,数组中不包括 ‘.’ 和 ‘..’
  4. fs.readdirSync(path):同步版的 readdir(). 返回文件名数组,其中不包括 ‘.’ 和 ‘..’ 目录.

这是对于 node 的文件系统 的学习,仅仅过了一遍api,了解了一下处理流程,理解有限,如果有错误之处,请指出,谢谢!

本文地址://guowenfh.github.io/2016/10/15/node-file-system/

使用搜索:谷歌必应百度