如何将SQLite3表数据放入NodeJS中的对象?

时间:2018-12-22 22:10:12

标签: node.js database sqlite ejs node-sqlite3

我正在制作一个ejs页面,我想查询SQL数据并将其显示在页面上。它总是不显示,或者不太可能显示[对象数据库]之类的内容。如何正确显示数据?

我正在尝试在EJS页面上显示来自NodeJS的SQLite3查询数据。

我尝试了很多事情,例如使db.all()的回调设置一个变量(例如foo),然后在我的ejs页面中写了<%= foo %>,但它没有用。有趣的是,当我做console.log();时,在回调内部,它显示了与查询一起使用的所有行,但是当我设置一个变量并尝试在回调外部使用它时,如果我预定义,我将得到ReferenceError(未定义)或得到一个空数组并将其行数据推入其中。

我的(简化的)EJS文件

<%
db.all("SELECT username FROM users WHERE username = 'foo'", [], (err, rows) => {
if (err) console.error(err.message);
    user = rows;
});

%>

<body>
    <%=user%>
</body>

我的(简体)节点应用程序文件 (我的模块是express,http,path,sqlite3,ejs,fs和ipware)

const src = path.resolve() + "/static/";


// Initialization
const app = new express();
app.set("view engine", "ejs");
let db = new sqlite.Database("db.db", (err) => {
    if (err) console.error(err.message);
    console.log("Connected to SQLite DB");
});

// SQLite3 stuff

//db.run("DROP TABLE IF EXISTS users");
db.run("CREATE TABLE IF NOT EXISTS users(username TEXT PRIMARY KEY, password TEXT NOT NULL)");
db.run("INSERT OR IGNORE INTO users VALUES ('foo', 'bar')");

// URLS

app.get('/', function (req, res) {
    res.render("main", {
        src: src,
        path: path,
        sqlite: sqlite,
        db: db
    });
    console.log(`\nHomepage request from ${IP(req)}`)
});

我知道如何修改表和执行SQL任务,但是我不知道如何设置字典来查询结果,我的应用程序确实需要这样做。谢谢。

编辑:我已经阅读了有关异步函数以及如何避免使Callback Hell的信息,我似乎不太了解异步函数。如果有人可以解释一下它们是如何工作的,以及我如何等待回调完成,就足够了。

0 个答案:

没有答案