NodeJS学习笔记

407 阅读3分钟

NVM

如何安装nvm

  • brew下载地址:

       1、brew.sh

       2、gitee.com/cunkai/Home…

  • nvm:nodejs版本管理工具,可切换多个nodejs版本工具;

  • macOS:使用brew install nvm;

  • windows:GitHub搜索nvm-windows,有下载地址。

使用nvm管理nodejs

  • nvm list 查看当前所有node版本;

  • nvm install v12.19.0 安装指定版本;

  • nvm use --delete-prefix 12.19.0 切换到指定版本;

  • nvm alias default v12.19.0 设置默认版本。

NODEJS

在Ubuntu安装nodejs

地址:github.com/nodesource/…

Git

在Ubuntu安装Git

执行命令:

sudo apt-get install git

Git配置

git config --global user.name 'ZHTGithub'
git config --global user.email 'chat195@163.com'
ssh-keygen -t rsa -C 'chat195@163.com'

生成ssh密钥(出现的提示有密钥所在目录)

ssh-keygen -t rsa

测试连接是否畅通

ssh -T git@git.oschina.net

Nginx

在Ubuntu安装Nginx

apt-get install nginx

获取配置文件的位置及语法是否正确:

nginx -t

使用Nginx实现端口转发

# include /etc/nginx/sites-enabled/*;
server {
        listen 80;
        server_name localhost;
        location / {
            proxy_pass http://127.0.0.1:3000;
        }
}

重启/重加载,使配置生效

service nginx restart
service nginx reload

使用Nginx部署HTTPS服务

# 将http重定向https
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name zenghaitao.cn;
    return 302 https://$server_name$request_uri;
}

# 配置https server
server {
    listen 443;
    server_name zenghaitao.cn;

    ssl on;
    ssl_certificate /etc/nginx/certs/zenghaitao.cn.pem;
    ssl_certificate_key /etc/nginx/certs/zenghaitao.cn.key;

    location / {
        root /html;
    }
}

使用Nginx获取真实客户端IP

server {
    listen 80;
    server_name zenghaitao.cn;
    
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Node.js 面试真题

nodejs是什么?

  • nodejs是基于Chrome V8引擎的JavaScript运行时;

  • nodejs出现前,js只能在浏览器运行;

  • nodejs出现后,js可以在任何安装nodejs的环境运行。

nodejs和前端js的区别

语法

  • 都使用ES语法;
  • 前端js使用 JS Web API;
  • nodejs使用 node API。

应用

  • 前端js用于网页,在浏览器运行;

  • nodejs可用于服务端,如开发web server;

  • nodejs也可用于本机,如webpack等本机的工具。

nodejs如何调试

  • 启动nodejs服务时,使用inspect;

  • 代码中使用debugger断点;

  • 使用Chrome调试 - chrome://inspect。

当前文件和当前目录的路径,如何获取?

  • __filename;

  • __dirname;

  • 两个都是全局变量。

commonjs 和 ES6 Module的区别

  • 语法不同
  • commonjs 是动态引入,执行时引入;
  • ES6 Module是静态引入,编译时引入。

path.reslove 和 path.join的区别

  • 两者都用于拼接路径;
  • path.reslove获取绝对路径;
  • path.join获取相对路径。

event loop 在浏览器和 nodejs 的区别

  • nodejs 异步API跟多,宏任务类型也更多;

  • nodejs 的Event loop分为6个阶段,要按照顺序执行;

  • 微任务中 process.nextTick 优先级更高。

async/await 执行顺序问题

session 如何实现登陆?

  • cookie如何实现登陆校验;
  • session和cookie的关系;
  • session为何需要存储在redis中。

描述koa2 和 express 的中间件机制

  • 从代码来看,中间件就是一个函数;

  • 从业务来看,中间件就是一个独立的模块;

  • 某快拆分,模块流转,即可完成复杂的功能。

读取大文件 - 流 stream

  • 1G大小的access.log;

  • 分析其中Chrome浏览器的占比;

  • 考虑CPU和内存的限制。

nodejs 线上为何开启多进程?

  • 高效使用多核CPU;
  • 充分利用服务器内存;
  • 最终:压榨服务器,不浪费资源。