【问题标题】:nodejs + sqlite3; callback to route returns empty array节点js + sqlite3;路由回调返回空数组
【发布时间】:2020-08-13 18:46:53
【问题描述】:

我有一个 sqlite3 数据库,其中包含一些种子数据。我有以下功能,当我从终端运行它时它确实有效:

const db = require('./conn');

function select_user (callback) {

    let q = `select uid, uname, pwd from usr`;

    db.all(q, function (err, rows) {
        if (err) {
            console.log('select error = ' + err)
            callback(err);
        }
        callback(rows);
    });
}

// select_user((d) => {console.log(d)});

module.exports = { select_user };

但是,当我从路由调用时,我得到一个空数组。这是代码:

var  crud = require('../models/crud');
    
router.get('/', function(req, res, next) {
        crud.select_user((d) => { res.render('index.ejs', { title: JSON.stringify(d)})});
})

这将呈现“这是一个 [] 页面”我希望它呈现返回的数据。我到处寻找答案,看到了许多显然有效的例子,但我看不出我在这里做错了什么。

补充说明:如果我不使用 JSON.stringify(),结果是“未定义”。

如果它们是相关的,这些是被调用的文件:

conn.js:

const sqlite3 = require('sqlite3').verbose();

const db = new sqlite3.Database('db.sql', (err) => {
    if (err){
        console.log('err' + err);
    }

    console.log('connected to db');
});


module.exports = db;

index.ejs:

<p>this is a
<% if (title) { %>
<%- title %>
<% } %>
page</p>

app.js 是标准的 Express 模板。我没有对该文件进行任何重大更改。

另一个更新:

我破坏了文件树并重新开始。数据库可以连接并构建usr 表并加载数据。现在,当我从路由中调用时,我会收到Error: SQLITE_ERROR: no such table: usr

【问题讨论】:

  • 你如何处理index.ejs中的title
  • @oneturkmen;它只是一个 html 模板。如果我在那里有一个常规单词,它会很好。我还尝试简单地 console.log() 结果,它呈现“未定义”,除非我使用 JSON.stringify(),它将呈现“[]”。我删除了所有这些,希望它更容易理解。
  • 在渲染 ejs 模板之前尝试在回调内的控制台中登录值。那里 d 的值是多少。 crud.select_user((d) =&gt; { console.log(d); res.render('index.ejs', { title: JSON.stringify(d)})})
  • @anees,值是[],如果我在select_user()中记录回调之前的值也是[]。

标签: node.js express


【解决方案1】:

问题是在我从路由目录进行调用后,正在根目录中构建一个新的数据库文件。我期待从模型目录中调用 crud 文件。

为了阻止相对路径,我使用了这个解决方案:

Dealing with Relative Paths with node.js

我的 conn.js 文件现在看起来像这样:

const sqlite3 = require('sqlite3').verbose();
var path = require('path')

db_path = path.join(__dirname, 'db.db');

const db = new sqlite3.Database(db_path , (err) => {
    if (err){
        console.log('err' + err);
    }

    console.log('connected to db');
});


module.exports = db;

希望这可以帮助遇到同样问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2018-07-15
    • 2019-08-26
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多