aurora blog
  • JS

    • 基本汇总
    • Date时间
    • Array方法
    • String 方法
    • Object方法
    • RegExp正则
    • Es6 新特性等
    • Event-Loop
    • Http and Https
    • for in和for of区别
    • Web Worker
    • Promise && async
    • 堆内存 & 栈内存
    • JS设计模式探索
    • npm & yarn
    • Fetch和Axios的区别
    • 学习及面试问题整理
    • URL 输入到页面加载过程
    • 跨域&nginx本地项目代理
  • FE框架

    • react

      • 基本用法
      • react生命周期
      • hooks 16.8版本后
      • Route原理
      • Redux源码解析
      • React16 Fiber
      • React-VirtualDOM
      • React事件委托机制
      • React性能优化
      • 状态管理方案对比
      • React 18新特性
    • vue

      • vue 基本用法
      • vue 生命周期
      • VirtualDOM
      • vue 事件委托
      • vue 架构
      • vue 状态管理
      • 问题等
    • React-Native

      • React-Native 基本用法
    • 微前端

      • 遇到的问题
    • 鸿蒙 harmony

      • harmony 基础
  • 构建工具

    • webpack

      • Webpack配置详解
      • Webpack的使用
      • Babel-polyfill
      • webpack面试题
    • vite

      • vite配置详解
      • vite面试题
    • rollup

      • Rollup配置详解
      • rollup面试题
    • 构建工具对比
  • 性能优化

    • 性能优化策略
    • 缓存策略
    • 性能优化面试题
  • 浏览器

    • 浏览器渲染原理
    • 浏览器缓存机制
    • 浏览器面试题
  • 工程化

    • 代码规范
    • 工程化面试题
  • 前端安全

    • XSS 攻击与防护
    • CSRF 攻击与防护
    • 前端安全面试题
  • 移动端开发

    • 移动端适配
    • 移动端开发面试题
  • 前端监控

    • 错误监控
    • 性能监控
    • 前端监控面试题
  • Typescript

    • Typescript详解
  • Servers

    • Nodejs
    • Nginx
  • Git命令

    • git常用规范
  • 数据库

    • mongodb
    • mongodb
  • Other

    • Jenkins自动化部署

Nodejs

  • 开启 import
    • 批量格式化
  • Node.js 常见面试题

开启 import

require("@babel/register")({
  babelrc: false,
  presets: ["@babel/preset-env"]
});

const {language} = require("./index");
module.exports = language;

//package.json
devDependencies: {
    "@babel/core": "^7.14.8",
    "@babel/preset-env": "^7.14.8",
    "@babel/register": "^7.14.5",
}

批量格式化

const prettier = require("prettier");
const fs = require("fs");
const getPrettierFiles = require("./getPrettierFiles");
const prettierConfigPath = require.resolve("../.prettierrc");//配置文件
const chalk = require("chalk");

let didError = false;
const files = getPrettierFiles();

files.forEach((file) => {
  const options = prettier.resolveConfig.sync(file, {
    config: prettierConfigPath,
  });
  const fileInfo = prettier.getFileInfo.sync(file);
  if (fileInfo.ignored) {
    return;
  }
  try {
    const input = fs.readFileSync(file, "utf8");
    const withParserOptions = {
      ...options,
      parser: fileInfo.inferredParser,
    };
    const output = prettier.format(input, withParserOptions);
    if (output !== input) {
      fs.writeFileSync(file, output, "utf8");
      console.log(chalk.green(`${file} is prettier`));
    }
  } catch (e) {
    didError = true;
  }
});

if (didError) {
  process.exit(1);
}
console.log(chalk.hex("#1890FF")("prettier success!"));

//===>>
const glob = require("glob");

const getPrettierFiles = () => {
  let files = [];
  const jsFiles = glob.sync("src/**/*.js*", {
    ignore: ["**/node_modules/**", "build/**"],
  });

  files = [...jsFiles];
  if (!files.length) {
    return;
  }
  return files;
};

module.exports = getPrettierFiles;

Node.js 常见面试题

  1. Node.js 是什么?有什么特点?
    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,特点有事件驱动、非阻塞 IO、高并发、适合 IO 密集型应用。

  2. 什么是事件循环(Event Loop)?
    事件循环是 Node.js 处理异步回调的机制,保证非阻塞 IO,通过事件队列和回调函数实现高并发。

  3. 什么是回调函数?如何避免回调地狱?
    回调函数是作为参数传递并在异步操作完成后执行的函数。避免回调地狱可以用 Promise、async/await 或模块化拆分。

  4. 如何实现异步编程?
    可以使用回调函数、Promise、async/await。

  5. 什么是模块?如何导入和导出?
    Node.js 使用 CommonJS 模块规范,通过 require 导入,module.exports 导出。

  6. Node.js 如何处理异常?
    使用 try/catch 捕获同步异常,异步异常通过回调函数的错误参数或 process.on('uncaughtException') 处理。

  7. 什么是中间件?在 Express 中如何使用?
    中间件是处理请求和响应的函数,可以实现日志、鉴权、解析 body 等功能。Express 用 app.use() 注册中间件。

  8. 如何连接和操作 MongoDB?
    可以使用 mongoose 或官方 mongodb 驱动,定义 Schema,进行增删改查操作。

  9. 什么是流(Stream)?有哪些类型?
    流是处理大文件或数据的方式,分为 Readable、Writable、Duplex、Transform 四种类型。

  10. 如何实现文件上传?
    可以用 multer、formidable 等中间件处理 multipart/form-data。

  11. 如何实现 JWT 用户认证?
    使用 jsonwebtoken 包生成和验证 token,结合中间件实现鉴权。

  12. Node.js 如何实现多进程?
    使用 child_process、cluster 模块实现多进程和负载均衡。

  13. 如何处理跨域问题?
    可以用 cors 中间件设置响应头,允许跨域请求。

  14. 如何实现日志记录?
    使用 winston、log4js 等日志库,记录请求、错误等信息。

  15. 如何优化 Node.js 性能?
    合理使用异步、缓存、负载均衡、数据库索引、减少阻塞操作等。

最近更新:: 2025/8/7 15:46
Contributors: sountstars, liyulai
Next
Nginx