最近在使用 nodejs 开发一套桌面小程序,需要读取数据库
使用 npm install/yarn add 加载了 mysql 模块并在 js 文件中 const mysql=require('mysql')
但是在使用 const conn=mysql.createConnection(profile)语句时没有响应
于是使用 try catch 捕捉到在 上述的声明 conn 的语句中 没有成功 require 到 mysql 模块(报错信息如下:
referenceError: cannot access 'mysql' before initialization
)
这是什么原因呢?经过排查,发现在上述 mysql 语句中,ide(vscode)提示 mysql 模块在 c 盘的某个路径,而实际上文件本地也存在一个可用的 mysql 模块(包括 index.js,connection.js 等)
1
misakawaque OP 代码如下:
const mysql=require('mysql') functon conn(){ let connection=null; try{ connection=mysql.createConnection({.....这里是数据库参数.....}); }catch(e){ alert(e.name+':'+e.message) }finally{ alert("代码到这里说明取到了 mysql") connection.connect() } |
2
zhuyongqi9 2021-08-12 23:43:11 +08:00
我在本地用了和你一样的代码,成功了
|
3
zhuyongqi9 2021-08-12 23:43:45 +08:00
你的 npm project 是怎么建立的,mysql module 是怎么导入
|
4
misakawaque OP |
5
yaodong0126 2021-08-13 00:45:46 +08:00
这和没有 require 到 mysql 一毛钱关系都没有,如果没有 require 到,那么你的第一行就会报错,且报错内容为:can't find module
|
6
Trim21 2021-08-13 01:04:41 +08:00 1
这个错不是模块导入的错,是 js 作用域的错。
你贴出来的 try 里面大概不小心多了一些不该有的东西 |
7
renmu123 2021-08-13 01:42:06 +08:00 via Android
大概因为连接是异步的,你用了同步代码
|
8
yunying 2021-08-13 10:01:57 +08:00
我觉得你得完整将代码贴出来。就如 6 楼说的。应该是 mysql 常量作用域的问题。
|
9
misakawaque OP |
10
misakawaque OP @yunying
问题部分代码粘贴 https://codepen.io/arconan-wang/pen/ZEKPJmX 代码下载 http://47.100.188.113/download/pdfreader.zip(有整整 120M 不建议下) |
11
EridanusSora 2021-08-13 12:03:59 +08:00 via Android
你这难道不是浏览器环境吗
|
12
EridanusSora 2021-08-13 12:10:47 +08:00
哦你是 electron 吗,那贴一下 background.js ?最新版本的 electron 默认不允许直接在 renderer 进程引入 node 模块的,需要设置 nodeIntegration 为 true,你看下你设置了吗
|
13
misakawaque OP |