【问题标题】:How can I load an extension on sqlite3 in nodejs?如何在 nodejs 中的 sqlite3 上加载扩展?
【发布时间】:2022-04-13 21:05:26
【问题描述】:

这是我的连接代码:

`
   var sqlite3 = require('sqlite3').verbose()
   const DBSOURCE = "db_path";
   let db = new sqlite3.Database(DBSOURCE, (err) => {
      if (err) {
        console.error(err.message)
        throw err
      }else{
         console.log('Connected to the SQLite database.');
      }
   });
   module.exports = db`

我在这里找到了一些东西,但我不知道它的正确方法或使其工作: https://github.com/mapbox/node-sqlite3/wiki/Extensions#databaseloadextensionpath-callback

试过这个:

`    let params = [];
    
    db.all(`select load_extension('./config/math.dll')`, params, (err, rows) => {
      console.log(err);
      if (err) {
        res.status(400).json({ StatusCode: 400, error: err.message });
        return;
      }
      console.log(rows)
    })`

并得到错误:错误:SQLITE_ERROR:未授权 我在 node.js 中找不到任何加载扩展的来源。

【问题讨论】:

    标签: node.js sqlite express


    【解决方案1】:

    出于安全原因,默认情况下禁用SELECT load_extension(...)。但是,您可以像这样加载扩展:

    const db = new sqlite3.Database('db.sqlite3');
    
    db.loadExtension('./lib/uuid.dll');
    
    db.all('SELECT uuid()', (error, rows) => {
      console.log(rows);
    });
    
    db.close();
    

    请注意文件名uuid.dll 并非偶然。在我的例子中,uuid extension 包含名为sqlite3_uuid_init 的入口点函数,因此必须将文件称为uuid.<extension> 才能使其开箱即用。您可以在SQLite documentation阅读更多内容。

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2018-02-12
      • 2012-02-04
      相关资源
      最近更新 更多