Nodejs的几个问题

发布于 1周前 作者 wuwangju 来自 nodejs/Nestjs

Nodejs的几个问题

1.node 怎么使用多线程

2.node 上传文件有比 multer 更好的方案吗

3.前端点击按钮上传图片之前如何实现图片预览

4.被 python 党喷 js 就是个辣鸡,应该怎么怼

17 回复

cluster
传文件这个中间件挺好用的
预览和 node 有鸡毛关系,直接去看 filereader
菜是原罪,和语言无关


最后一句好精辟

  1. 使用 worker_threads
    3. 前端预览可以直接前端实现, 使用 canvas
  1. Node 现在多线程是试验阶段,不过已经离稳定发布不远了,现在最新版 Node 已经不需要加 flag 就可以使用 https://nodejs.org/api/worker_threads.html 如果对稳定性(主要是 API,程序已经很稳定了,不保证正式发布前 API 是否会做调整,不过大概率不会有大变动)要求不严格可以开始用了。或者可以去找一些 Web worker 的其他方案。
    如果接受多进程方案的话,Cluster、Chield Process 都很稳定,可以根据自己的需要使用。
    2. 没抠过这个,用得比较多的方案是上传 SDN 再从 Node 上下载,这样对弹性分布式+消息总线的系统友好一些。
    3. 跟 Node 没关系,个人没怎么做过,不过有思路是用 HTML5 API 读取本地文件然后再用 Canvas 画出来,这样可以支持上传前编辑,最终上传的应该是页面内存里的那个编辑过的图片数据。可以找找有没有相关的前端组件。
    4. 软件工程没有银弹,在不同的地方使用最合适的技术栈才是最明智的。
  1. 上次看到一个用 https://www.npmjs.com/package/fibers
    是一种 coroutine,被 https://www.npmjs.com/package/sass 使用,Dart 写的,很有趣的用法

    4. 电子竞技(

2 和 3 可以放到客户端那边去做,亦即前后端分离。
2 的核心原理实际上就是 HTML5 的文件上传,3 可以调 FileReader 接口 new 个 Image 然后直接填充,当然也可以用 Canvas (如果项目里没大规模用 Canvas,我觉得还是前者比较有优势)
4 ……这种人懒得喷,就让他继续辣鸡下去好了。

关于 2 和 3,可以参考 https://segmentfault.com/a/1190000006718963
原文用了个 js 插件来处理图片兼容性的问题,不过上传和预览的大致原理都有涉及。

4.告诉他 php 是世界上最好的语言.

4 支持他把他培养成大煞笔

  1. 菜是原罪 (PHP 是世界上最好的语言)

图片上传试试我这个 www.npmjs.com/package/@redbuck/image-uploader

  1. 将上传的图片转换为 base64, 再用 img 标签直接预览
  1. 是是是,你说得对,Python 语法容易阅读,并且能做大数据,人工智能啥的,js 语法就是个垃圾,性能坑的要死,要不是前端必须要用它,我才不想用呢。 我现在呀,就后悔没学 Python,不然现在月薪应该就有 50K 了吧。

3 , express + ejs 的话,上传本地服务时候,把图片存在 session 中,提交表单时候,delete session.img

3.直接走 blob 协议就好
4. js 确实辣鸡

关于Node.js的几个常见问题,这里简要解答并提供一些代码示例:

  1. Node.js是什么? Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,允许JavaScript代码在服务器端运行。

  2. 如何创建一个简单的Node.js服务器? 使用Node.js内置的http模块可以创建一个简单的服务器。

    const http = require('http');
    
    const hostname = '127.0.0.1';
    const port = 3000;
    
    const server = http.createServer((req, res) => {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end('Hello World\n');
    });
    
    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
    
  3. Node.js如何处理异步操作? Node.js使用回调函数、Promises和async/await来处理异步操作。

    function asyncOperation() {
      return new Promise((resolve) => {
        setTimeout(() => resolve('Done!'), 1000);
      });
    }
    
    async function run() {
      console.log('Starting...');
      const result = await asyncOperation();
      console.log(result);
    }
    
    run();
    
  4. Node.js有哪些常用的框架? Node.js有许多流行的框架,如Express、Koa、NestJS等,它们简化了Web应用程序的开发过程。

以上是对Node.js几个常见问题的简要回答,希望对你有帮助。如果有更多具体问题,欢迎继续提问。

回到顶部