NodeJs 基础知识

  • 稳定性版本

版本的小数位,偶数为稳定版本,奇数为非稳定版本,稳定版本中已经发布的 API 是不会修改的。

  • cmd 命令行操作

Node 服务器中有全局变量 process

浏览器中有 window

  • 模块化输入输出

exports 输出

require 输入

  • url

url.parse

> url.parse('https://www.huangyuhong.cn:8080/class/list?name=now&type=slit')

Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.huangyuhong.com:8080',
  port: '8080',
  hostname: 'www.huangyuhong.com',
  hash: null,
  search: '?name=now&type=slit',
  query: 'name=now&type=slit',
  pathname: '/class/list',
  path: '/class/list?name=now&type=slit',
  href:
   'https://www.huangyuhong.cn:8080/class/list?name=now&type=slit' }
> url.parse('https://www.huangyuhong.cn:8080/class/list?name=now&type=slit','true')

Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.huangyuhong.com:8080',
  port: '8080',
  hostname: 'www.huangyuhong.com',
  hash: null,
  search: '?name=now&type=slit',
  query: { name: 'now', type: 'slit' },
  pathname: '/class/list',
  path: '/class/list?name=now&type=slit',
  href:
   'https://www.huangyuhong.cn:8080/class/list?name=now&type=slit' }
> url.resolve('http://example.com/', '/one');    
// 'http://example.com/one'
  • querystring – 查询字符串
const querystring = require('querystring');

querystring.stringify(obj[, sep[, eq[, options]]])

该方法通过遍历给定的 obj 对象的自身属性,生成 URL 查询字符串。

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
// 返回 'foo=bar&baz=qux&baz=quux&corge='

querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':');
// 返回 'foo:bar;baz:qux'

querystring.parse(str[, sep[, eq[, options]]])

该方法会把一个 URL 查询字符串 str 解析成一个键值对的集合。

sep 默认是 &

querystring.parse('foo=bar&abc=xyz&abc=123')
{
  foo: 'bar',
  abc: ['xyz', '123']
}

querystring.escape(str)

对给定的 str 进行 URL 编码。

该方法是提供给 querystring.stringify() 使用的,通常不直接使用。

querystring.unescape(str)

对给定的 str 进行解码。
  • http

http.createServer([options][, requestListener])

requestListener是一个自动添加到'request'事件的方法。

var http = require('http')

http.createServer(function(req,res) {
  res.writeHead(200,{'Content-Type':'text/plain'})
  res.write('hello')
  res.end()
}).listen(2500)

打开浏览器,输入网址,展示如下图

用到的语法:

response.writeHead(statusCode[, statusMessage][, headers])

发送一个响应头给请求。 状态码是一个三位数的 HTTP 状态码,如 404。 最后一个参数 headers 是响应头。 第二个参数 statusMessage 是可选的状态描述。

response.setHeader() 设置的响应头会与 response.writeHead() 设置的响应头合并,且 response.writeHead() 的优先。

response.write(chunk[, encoding][, callback])

如果该方法被调用且 response.writeHead() 没有被调用,则它会切换到隐式响应头模式并刷新隐式响应头。

该方法会发送一块响应主体。 它可被多次调用,以便提供连续的响应主体片段。

server.listen()

开启HTTP服务器监听连接。

http.get(url[, options][, callback])

http.get(url, function(res) {
  var html = ''

  res.on('data', function(data) {
   html += data
  })

  res.on('end', function() {
    console.log(html);
  })
}).on('error', function(err) {
  console.log('err: ' + err);
})

http.request(options[, callback])

http.request(url[, options][, callback])

Node.js 为每台服务器维护多个连接来进行 HTTP 请求。 该函数允许显式地发出请求。

onst postData = querystring.stringify({
  'msg' : 'Hello World!'
});

const options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
};

const req = http.request(options, (res) => {
  console.log(`状态码: ${res.statusCode}`);
  console.log(`响应头: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`响应主体: ${chunk}`);
  });
  res.on('end', () => {
    console.log('响应中已无数据。');
  });
});

req.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});

// 写入数据到请求主体
req.write(postData);
req.end();
  • events
var eventEmitter = require('events').EventEmitter

emitter.on(eventName, listener)

添加事件监听

server.on('connection', (stream) => {
  console.log('已连接');
});

emitter.removeAllListeners([eventName])

删除所有事件

emitter.removeListener(eventName, listener)

删除某个监听函数,(需要是定义的 function 才能删除)

function give(who) {
console.log('give1 ' + who);
}
life.on('want', give)

life.removeListener('want', give)

emitter.listenerCount(eventName)

获取某个事件的监听器个数

EventEmitter.defaultMaxListeners

设置允许使用的监听器个数,默认一般是10个

emitter.setMaxListeners(emitter.getMaxListeners() + 1);

emitter.getMaxListeners()

获取允许的个数

  • 其它:

GitHub 搜索源码快捷键 T