【问题标题】:How to use node_modules in Deno as typescript imports?如何在 Deno 中使用 node_modules 作为打字稿导入?
【发布时间】:2021-05-30 00:43:17
【问题描述】:

Project:REST API,用于提供存储在 neo4j 图数据库中的信息。 后端:Deno

我对 deno 很陌生,但我对 typescript 并不陌生,我经常在 Angular 中使用它。

问题:我想使用驱动程序将我的 neo4j 数据库连接到我的后端,但是没有为 Deno 制作的 neo4j 驱动程序。我已经在互联网和文档中搜索了解决方案,并一直在尝试使用节点模块导入工具导入 javascript 库,该工具已从类似答案中得到建议并得到 deno 团队的支持。

本质上,我做npm install neo4j-driver,然后将以下代码添加到我的 deno 项目中。

失败的解决方案:javascript 节点模块包装器

我在 server.ts 文件中实现调用此函数作为我的 deno 服务器的测试。

我用于 deno 的命令是:deno run --allow-all --unstable server.ts

neo4j_conn.ts 文件:(由 server.ts 调用)

import { createRequire } from "https://deno.land/std/node/module.ts";
const require = createRequire(import.meta.url);

export async function testconnection(uri: string, user: string, password: string) {

  //This is the line that fails. 
  var neo4j = require('neo4j-driver').v1;  //this fails whether or not I include the .v1 or not. 

  var driver = neo4j.driver(uri, neo4j.auth.basic(user, password))
  const session = driver.session()
  const personName = 'Alice'

  try {
    const result = await session.run(
      'CREATE (a:Person {name: $name}) RETURN a',
      { name: personName }
    )

    const singleRecord = result.records[0]
    const node = singleRecord.get(0)

    console.log(node.properties.name)
  } finally {
    await session.close()
  }

  await driver.close()

}

这会返回以下错误:

error: Uncaught (in promise) Error: Cannot find module 'net'
Require stack:
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/node/node-channel.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/node/index.js       
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/bolt/handshake.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/bolt/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver/lib/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/neo4jconn.ts
    at Function._resolveFilename (https://deno.land/std@0.97.0/node/module.ts:273:19)
    at Function._load (https://deno.land/std@0.97.0/node/module.ts:380:29)
    at Module.require (https://deno.land/std@0.97.0/node/module.ts:133:21)
    at require (https://deno.land/std@0.97.0/node/module.ts:1158:16)
    at Object.<anonymous> (file:///mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/node/node-channel.js:24:29)    
    at Module._compile (https://deno.land/std@0.97.0/node/module.ts:168:36)
    at Object.Module._extensions..js (https://deno.land/std@0.97.0/node/module.ts:1109:10)
    at Module.load (https://deno.land/std@0.97.0/node/module.ts:147:34)
    at Function._load (https://deno.land/std@0.97.0/node/module.ts:413:14)
    at Module.require (https://deno.land/std@0.97.0/node/module.ts:133:21)

据我所知,我所做的一切都是正确的,但在 typescript/js 模块翻译方面我有点过头了。

我的文件结构如下:

package.json
package-lock.json
server.ts
neo4j_conn.ts
node_modules -|
              |
              :

Neo4j 开发者 js 文档:https://neo4j.com/developer/javascript/

Deno 节点模块“需要”:https://doc.deno.land/https/deno.land/std@0.97.0/node/module.ts

【问题讨论】:

    标签: javascript typescript neo4j deno


    【解决方案1】:

    如果您查看 std 中的 Node 兼容层 README,您会发现目前没有适用于 net 库的兼容模块。兼容性会日益提高,但要考虑到 Deno 并不是 Node 的替代品,而是一个全新的东西,默认情况下无法与 Node 库一起使用

    https://deno.land/std@0.97.0/node

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 2017-05-07
      • 2020-12-03
      • 2022-07-28
      • 2017-07-31
      • 2021-07-23
      • 2020-04-18
      • 1970-01-01
      相关资源
      最近更新 更多