流行的Node项目的Deno替代品

2020年12月30日11:09:58 发表评论 39 次浏览

本文概述

Deno是一个简单的现代安全运行时, 用于使用JavaScript和TypeScript编写应用程序, 该程序使用Rust内置的V8引擎。

这不是一篇说明Deno是什么的文章。但是, 如果你需要进一步了解Deno, 我们可以为你提供帮助。查看这篇文章:什么是Deno, 它与Node.js有何不同?

你还可以查看Deno资料库如果你对未来的发展感兴趣。

现在, Node在过去几年中变得强大而流行。也出现了一些流行的Node项目, 称为依赖项。自Deno诞生以来, 人们对如何做与Deno中的Node一样的事情存在很多疑问。

我将介绍Node中一些最受欢迎的示例, 并在Deno中向你展示其替代方案。

Next.js / Aleph.js

Aleph.js是Deno中的React框架。是的, 就是这样。正如Next.js在Node中。 Next.js for Node提供了使用React生产所需的所有功能。它使你可以构建服务器端渲染, 自动代码拆分, 静态导出选项, 易于生产的构建以及静态Web应用程序。

与Next.js不同, Aleph.js不使用或不需要捆绑器, 因为它使用ESM(ECMAScript模块)导入语法。导入的每个模块仅编译一次并缓存:

import React from "https://esm.sh/react@17.0.1"
import Logo from "../components/logo.tsx"

export default function Home() {
    return (
      <div>
        <Logo />
        <h1>Hello World!</h1>
      </div>
    )
}

Aleph.js提供的其他高级功能是异步导入, 自定义404页面, 自定义加载页面, useDeno钩子等等。

Express.js / Opine

Express.js因其开放, 免费或自由的极简Web框架而非常受欢迎。它的理念是为HTTP服务器提供小型, 快速的工具, 使其成为SPA, 网站, 混合或公共HTTP API的绝佳选择。无论如何, 你都可以使用Express.js构建自己的框架。另一个伟大的事情是它强大的路由系统, 该系统可以有效地响应客户端请求, 并且很少选择HTTP帮助程序。

与Express.js不同, 高山专注于高性能, 内容协商(当基于一种请求返回响应时很棒), 强大的路由以及对HTTP代理中间件的支持(在授权, 负载平衡, 日志记录等方面很有用)。 Opine的前途一片光明!

我们为制作了一个自定义演示.
不完全是。点击这里查看.

流行的Node项目的Deno替代品1
import opine from "../../mod.ts";

const app = opine();

app.get("/", function (req, res) {
  res.send("Hello Deno!");
});

const server = app.listen();
const address = server.listener.addr as Deno.NetAddr;
console.log(`Server started on ${address.hostname}:${address.port}`);

我真的很喜欢Opine如何处理内容协商, 让你一目了然地处理每种格式:

import { opine } from "../../mod.ts";
import { users } from "./db.ts";
import type { Request, Response } from "../../src/types.ts";

const app = opine();

app.get("/", (req, res) => {
  res.format({
    html() {
      res.send(
        `<ul>${users.map((user) => `<li>${user.name}</li>`).join("")}</ul>`, );
    }, text() {
      res.send(users.map((user) => ` - ${user.name}\n`).join(""));
    }, json() {
      res.json(users);
    }, });
});

Passport.js /玛瑙

Passport.js只是有助于处理节点服务器中的身份验证。它充当中间件, 非常灵活且模块化。它广泛用于任何基于Express.js的Web应用程序中。它为一组身份验证策略提供支持(用户名和密码, 脸书, 推特等)。

与Passport.js不同的是, y玛瑙正在保持代码的整洁和系统。与Passport.js一样, 它可以帮助你简化身份验证策略而无需导入。

就像将Passport.js用作中间件一样, Onyx也是如此:

import { Router } from '../deps.ts';
import { onyx } from '../deps.ts';
import User from './models/userModels.ts';

const router = new Router();

// invoke onyx.authenticate with the name of the strategy, invoke the result with context
router.post('/login', async (ctx) => {
  await (await onyx.authenticate('local'))(ctx);

  if (await ctx.state.isAuthenticated()) {
    const { username } = await ctx.state.getUser();
    ctx.response.body = {
      success: true, username, isAuth: true, };
  } else {
    const message = ctx.state.onyx.errorMessage || 'login unsuccessful';
    ctx.response.body = {
      success: false, message, isAuth: false, };
  }
});

在服务器文件中设置非常简单。与在Node中执行的过程相同:

import { Application, send, join, log } from '../deps.ts';
import { Session } from '../deps.ts';

// Import in onyx and setup
import { onyx } from '../deps.ts';
import './onyx-setup.ts';

// Server Middlewares
import router from './routes.ts';

// SSR
import { html, browserBundlePath, js } from './ssrConstants.tsx';

const port: number = Number(Deno.env.get('PORT')) || 4000;
const app: Application = new Application();

// session with Server Memory
// const session = new Session({ framework: 'oak' });

// session with Redis Database
const session = new Session({
  framework: 'oak', store: 'redis', hostname: '127.0.0.1', port: 6379, });

// Initialize Session
await session.init();
app.use(session.use()(session));

// Initialize onyx after session
app.use(onyx.initialize());

NodeRedis / DenoRedis

雷迪斯是一种流行的内存中数据结构服务器, 通常已知并用于缓存以及数据库和消息代理。它超快, 吞吐率极高。

在Node中, 节点还原一直是高性能Redis客户端, 它是完全异步的。

地雷迪斯是Deno的Redis客户端的实现:

import { connect } from "https://deno.land/x/redis/mod.ts";
const redis = await connect({
  hostname: "127.0.0.1", port: 6379
});
const ok = await redis.set("hoge", "fuga");
const fuga = await redis.get("hoge");

Nodemon / Denon

Nodemon是一个命令行界面(CLI), 用于监视文件系统中Node项目中的任何更改, 并自动重新启动进程/服务器。这有助于避免手动重新启动服务器以查看已进行的更改。

在Deno, 我们有天龙。与nodemon没有区别。你要做的就是更换地用这个词天龙.

denon run app.ts

WebSocket

Websocket API在客户端和服务器之间打开双向交互通信。基本上, 客户端和服务器之间存在持久连接, 因此两者都可以随时发送数据。的ws库是作为Node项目的客户端和服务器实现而构建的。

幸运的是, 我们有deno websocket—与ws但是对于迪诺。

服务器端的用法与任何Node项目的用法非常相似:

import { WebSocket, WebSocketServer } from "https://deno.land/x/websocket@v0.0.5/mod.ts";

const wss = new WebSocketServer(8080);
wss.on("connection", function (ws: WebSocket) {
  ws.on("message", function (message: string) {
    console.log(message);
    ws.send(message)
  });
});

客户端相同:

import { WebSocket } from "https://deno.land/x/websocket@v0.0.5/mod.ts";
const endpoint = "ws://127.0.0.1:8080";
const ws: WebSocket = new WebSocket(endpoint);
ws.on("open", function() {
  console.log("ws connected!");
});
ws.on("message", function (message: string) {
  console.log(message);
});
ws.send("something");

CORS

接下来我们有科尔斯, 一个Node软件包, 提供作为中间件的支持, 可用于启用CORS有多种选择。

下面显示了在Express.js应用程序中启用所有cors请求的简单用法:

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products/:id', function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

在Deno, 我们将在Opine中做同样的事情。例如:

import { opine, serveStatic } from "https://deno.land/x/opine/mod.ts";
import { opineCors } from "../../mod.ts";

const app = opine();

app.use(opineCors()); // Enable CORS for All Routes

app
  .use(serveStatic(`${Deno.cwd()}/examples/opine/static`))
  .get("/products/:id", (_req, res) => {
    res.json({msg: 'This is CORS-enabled for all origins!'});
  })
  .listen(
    { port: 8000 }, () => console.info("CORS-enabled web server listening on port 8000"), );

Bcrypt / BCrypt

两者都是用于哈希密码的相似库。加密由Niel Provos设计的是一种密码哈希功能, 通常用于密码。它的基本作用是根据密码生成一个哈希值并将其保存。

当我们有加密对于Node, 我们现在有BCrypt, 但对于Deno。 Deno中的用法仍几乎与Node中相同:

import * as bcrypt from "https://deno.land/x/bcrypt/mod.ts";

const hash = await bcrypt.hash("test");

// To check a password
const result = await bcrypt.compare("test", hash);

电子/ WebView

在Node中, 你可以使用以下命令创建跨平台的桌面应用程序电子。在Deno, 我们现在有网页浏览。它还用于为跨平台桌面应用程序创建GUI:

import { WebView } from "https://deno.land/x/webview/mod.ts";

const html = `
  <html>
  <body>
    <h1>Hello from deno</h1>
  </body>
  </html>
`;

await new WebView({
  title: "Local webview_deno example", url: `data:text/html, ${encodeURIComponent(html)}`, height: 600, resizable: true, debug: true, frameless: false, }).run();

MongoDB

MongoDB受欢迎, 可扩展且灵活。它是一个基于文档的数据库, 主要在JavaScript生态系统中广泛使用。

是的, 现在可以在Deno中使用MongoDB了:

import { MongoClient } from "https://deno.land/x/mongo@v1.0.0/mod.ts";

const client = new MongoClient();
client.connectWithUri("mongodb://localhost:27017");

// Defining schema interface
interface UserSchema {
  _id: { $oid: string };
  username: string;
  password: string;
}

const db = client.database("test");
const users = db.collection<UserSchema>("users");

// insert
const insertId = await users.insertOne({
  username: "user1", password: "pass1", });

// insertMany
const insertIds = await users.insertMany([
  {
    username: "user1", password: "pass1", }, {
    username: "user2", password: "pass2", }, ]);

// findOne
const user1 = await users.findOne({ _id: insertId });

// find
const all_users = await users.find({ username: { $ne: null } });

// find by ObjectId
const user1_id = await users.findOne({ _id: "idxxx" });

SMTP

SMTP充当Nodemailer中用于发送邮件的主要传输方式。现在可以在Deno中作为迪诺SMTP:

import { SmtpClient } from "https://deno.land/x/smtp/mod.ts";

const client = new SmtpClient();

await client.connect({
  hostname: "smtp.163.com", port: 25, username: "username", password: "password", });

await client.send({
  from: "mailaddress@163.com", to: "to-address@xx.com", subject: "Mail Title", content: "Mail Content, maybe HTML", });

await client.close();

NPM /交易

npmin Node是流行的软件包管理工具, 已经存在了很长一段时间, 非常棒的是, 我们在Deno中有了它的替代品, 特雷克斯。它带有很多选项, 就像npm一样。永远不要忘记, 程序包已缓存并且仅生成一个文件。

这些Deno替代品很多, 目前仍在开发中。我们还有:

  • 恐龙–管理环境变量
  • denodb–适用于MySQL, MongoDB, SQLite的ORM
  • CSV– CSV解析器
  • 地名MySQL– MySQL驱动程序
  • cac–用于构建命令行应用程序的框架。

总结

在本文中, 我们介绍了在开发期间使用的一些流行的Node项目的Deno替代方案。我们相信Deno仍在增长, 如果你要进一步涉足Deno世界, 那么很高兴知道当前可用的替代方案。

如果你觉得我跳过了流行的Node替代方案, 则可以将其作为答复。

只有200 监视生产中失败和缓慢的网络请求

部署基于节点的Web应用程序或网站很容易。确保你的Node实例继续为你的应用程序提供资源是一件很困难的事情。如果你希望确保成功完成对后端或第三方服务的请求,

尝试notlogy

.

LogRocket网络请求监控

https://notlogy.com/signup/

日志火箭就像Web应用程序的DVR一样, 实际上记录了你网站上发生的一切。无需猜测问题发生的原因, 你可以汇总并报告有问题的网络请求, 以快速了解根本原因。

notlogy用你的应用程序记录基线性能计时, 例如页面加载时间, 到第一个字节的时间, 缓慢的网络请求, 并记录Redux, NgRx和Vuex的操作/状态。

免费开始监控

.

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: