在阅读了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文档

0 0
原创粉丝点击