在阅读了Nodejs文档后我学到的19件事
来源:互联网 发布:php打印实心菱形 编辑:程序博客网 时间:2024/04/30 01:00
我认为我已经非常了解Node了,我已经使用它写网站长达三年之久。但是我从来没有真正的静下心来阅读它的官方文档。
就像长期读者所知道的,我喜欢在旅行中写出接口,原型,方法,函数,数据类型还有一些和网站开发相关的,因此我可以填补我不知道的空白,Node文档是我的最后的文档,
xxx,所以我想在这篇小文章中分享给大家。我会以降序的方式提出来。就像我遇到新人时我如何穿衣服一样。
querystring模块作为通用的解析器
你可能从一些奇怪的人的数据库中得到了一些数据,在表单中这些数据是以一系列键值对的数组出现的name:Sophie;shape:fox;condition:new.
通常你会像对待javascript对象一样去处理他们,所以你先创建了一个空对象,然后你创建了一个用;
分段开的数组, 循环遍历它对于每个值,用:
分离开,然后把数组的第一个值作为对象的键,第二个作为值。
Right?
NO!!你可以使用querystring
const weirdoString = `name:Sophie;shape:fox;condition:new`;const result = querystring.parse(weirdoString, `;`, `:`);// result:// {// name: `Sophie`,// shape: `fox`,// condition: `new`,// };
QuaryString Node.js v7.0.0文档
V8检查
执行node时用--inspect
,他会告诉你一个URL,把URL粘贴到Chorm中,在开发者工具里面调试Node,愉快的一天。这里是Paul Irush这么做的
这仍然是”实验性的”,但是就像我的药物治疗一样,并且我现在做的很好。
Debugger | Node.js v7.0.0文档
nextTick和setImmediate之间的区别
如果你能想象到他们有不同的名字,记住它们的区别就简单了。
process.nextTick()
应该是 process.sendThisToTheStartOfTheQueue()
。 setImmediate()
应该被叫做 sendThisToTheEndOfTheQueue()
.
(无关话题:我一直认为在React中,props
应该被称为stuffThatShouldStayTheSameIfTheUserRefreshes
并且state
应该被称为stuffThatShouldBeForgottenIfTheUserRefreshes
)
process |Node.js v7.0.0文档
sever.listen作为一个对象
我喜欢传递一个”选择”参数而不是五个不同名字并且必须特殊排列的参数,其实当运行服务监听请求的时候你可以这样做。
require(`http`) .createServer() .listen({ port: 8080, host: `localhost`, }) .on(`request`, (req, res) => { res.end(`Hello World!`); });
这是一个不怎么光明正大的做法,因为在http.server文档中并没有提及这个,你只能在net.server文档(http.server继承自这个文档)中找到它。
net|Node.js v7.0.0 文档
相对路径
你传递到fs模块的路径可以使相对路径。这和process.cwd()
是相关联的。大多数人或许知道这个,但是我认为最好用完整路径。
const fs = require(`fs`);const path = require(`path`);// why have I always done this...fs.readFile(path.join(__dirname, `myFile.txt`), (err, data) => { // do something});// when I could just do this?fs.readFile(`./path/to/myFile.txt`, (err, data) => { // do something});
File System | Node.js v7.0.0文档
路径解析
不需要用各种正则去匹配解析来得到文件名和路径的扩展,当我需要时我只需要这样
myFilePath = `/someDir/someFile.json`;path.parse(myFilePath).base === `someFile.json`; // truepath.parse(myFilePath).name === `someFile`; // truepath.parse(myFilePath).ext === `.json`; // true
path | Node.js v7.0.0文档
用颜色来渲染consloe
可以用console.dir(obj,{colors:true}),打印时对象的props/values会以不同的颜色被打印,可以让我们更方便查看。
Console | Node.js v7.0.0文档
告诉setInterval()待在角落里
你每天使用setInterval()让它清理数据库,通常当setInterval()被挂起时Node’s事件循环不会退出。如果你想让Node睡眠(我不知道这有什么效益)你可以这样做:
const dailyCleanup = setInterval(() => { cleanup();}, 1000 * 60 * 60 * 24);dailyCleanup.unref();
如果你没有什么需要挂起(例如没有http监听服务),Node不会退出
Node.js v7.0.0文档
使用信号常量
如果你喜欢kill,你可能这样做过:
process.kill(process.pid, `SIGTERM`);
这没有什么问题,xxx还可以用一个更粗暴的方式:
process.kill(process.pid, os.constants.signals.SIGTERM);
IP地址确认
有一个叫IP地址验证器的东西,我曾经写过正则表达式来做这件事情不止一次,愚蠢啊!
require(
net).isIP(
10.0.0.1)
将会返回4 require(
net).isIP(
cats)
将会返回0
因为cats不是IP地址。
net | Node.js v7.0.0文档
os.EOL
你曾经硬编码过行尾的字符吗?
天啊!
专门为你,有os.EOL(在windows上是\r\n在别处是\n),切换到os.EOL将会保证你良好的代码规范。
const fs = require(`fs`);// badfs.readFile(`./myFile.txt`, `utf8`, (err, data) => { data.split(`\r\n`).forEach(line => { // do something });});// goodconst os = require(`os`);fs.readFile(`./myFile.txt`, `utf8`, (err, data) => { data.split(os.EOL).forEach(line => { // do something });});
OS | Node.js v7.0.0文档
查找状态码
我们需要查找普通HTTP请求的状态码和它们的友好的名字。http.STAUS_CODES就是我要说的按个对象,每个key值就是它的状态码,相匹配的value值就是我们要阅读的。因此我们可以这么做:
someResponse.code === 301; // truerequire(`http`).STATUS_CODES[someResponse.code] === `Moved Permanently`; // true
HTTP | Node.js v7.0.0文档
预防不必要的崩溃
我一直认为下面的代码会使服务停止时荒唐的:
const jsonData = getDataFromSomeApi(); // But oh no, bad data!const data = JSON.parse(jsonData); // Loud crashing noise.
为了预防这愚蠢的会损害你一天的心情的事情发生,你可以process.on(‘uncaughtException’,console.error);放在你的Node app中最顶上的位置。
当然,我是一个理智的人,所以我使用PM2并且把事情放到try…catch中去
需要注意的是,这不是最好的实践,并且在一个大型项目中可能会是一个坏主意,你要自己去决定你去相信官方文档还是一些不入流的博客
process | Node.js v7.0.0文档
仅是once()
除了on()之外,对于所有的事件发射器来说还有一个once()方法,
server.once(`request`, (req, res) => res.end(`No more from me.`));
Events | Node.js v7.0.0文档
订制console
你可以创建属于你自己的console使用 new console.Console(standradOut,errorOut),并且传入自己的输出流。
为什么?我也不知道。可能你想要创建一个console让它输出到文件中,或者套接字,胡总恶化其他的地方。
Console | Node.js v7.0.0文档
- 在阅读了Nodejs文档后我学到的19件事
- 我在阅读NodeJS文档中读出的19个套路
- 我在阅读 NodeJS 文档中读出的19个套路
- 我在世界最热创业孵化器YC学到的58件事
- 我在世界最热创业孵化器YC学到的58件事 .
- [译文]通过做技术支持我学到的20件事
- 在微软的八个月里,我学到了这些
- 在微软的八个月里,我学到了这些
- 在微软的八个月里,我学到了这些
- 在微软的八个月里,我学到了这些
- 我在公司都学到了什么
- 在淘宝我学到了什么?
- 【static&extern,有心得】staitc在C中,修饰函数.(让我明白了,在include该文件后,则该文件的static也可见了)
- 我学到哪了
- 我学到了什么?
- Kindrid创始人:2013年我学到的创业17件事
- 我在苹果公司学到的编程技巧
- 我在香港的公司学到什么
- myeclipse10配置tomcat详细过程
- Google Zxing 二维码生成与解析
- 各浏览器中自定义滚动条的样式
- Android中怎样用@ViewInject注解来彻底放弃findViewByid,gogoog0!!!
- 树结构练习——判断给定森林中有多少棵树
- 在阅读了Nodejs文档后我学到的19件事
- C++中的构造函数,拷贝构造函数,析构函数和赋值运算符重载
- python 简单实例训练(41~50)
- 避免在类别(category)中定义属性(@property)
- java语言基础04循环结构
- windows下面安装Python、pip、Requests、MysqlDB终极教程
- NOIP2014 提高组 寻找道路
- SVN重置密码后,避免一直输入密码的问题!!!
- Opensips 编译需要的安装包