【问题标题】:Having some problems trying to call a function from another script尝试从另一个脚本调用函数时遇到一些问题
【发布时间】:2022-10-01 01:49:24
【问题描述】:

我正在建立一个模型网站来尝试学习 NodeJS。我想要一个登录系统,我正在尝试将我的注册页面与我的数据库脚本连接起来。向数据库发送查询的 sql 函数按预期工作,但是,当尝试从管理注册网页的脚本中调用查询函数时,我得到的只是错误 500。

如果有人能指出我正确的方向会很酷,这肯定是我还不知道的 NodeJS 的一些怪癖。

这是我的注册页面脚本,它应该从 POST 路由中调用查询函数:


var express = require(\'express\');
var router = express.Router();
var db = require(\'../public/javascripts/dbController\');

router
    .get(\'/\', function(req, res, next) {
        res.render(\'register.html\', {title: \'Register\'})
    })
    .post(\'/\', function(req, res, next) {
        register(req.body);
        res.render(\'register.html\', {title: \'Register\'})
    })

function register(request)
{

    let username = request.login;
    let password = request.password;

    let sql = \"INSERT INTO users (user_username, user_password, user_status) VALUES (\"+username+\"\',\"+password+\"\', 1);\";
    console.log(\"query\");
    //Why is this not working?
    db.query(sql);
}

module.exports = router;

这是(部分)我的 dbController 脚本:


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

let db = new sqlite3.Database(\'./public/database/db.db\', sqlite3.OPEN_READWRITE, (err) => {
    if (err && err.code == \"SQLITE_CANTOPEN\") {
        createDatabase();
        return;
        } else if (err) {
            console.log(\"Getting error \" + err);
            exit(1);
    }
});

//This function is not running when I ask for it in register.js
function query(sql){

  console.log(\"running query: \" + sql)

  db.all(sql, [], (err, rows) => {
    if (err) {
      throw err;
    }
    rows.forEach((row) => {
      console.log(row.name);
    });
  });

}

module.exports = query;

我想我可能必须通过主应用程序脚本来路由我的脚本,或者我导出错误?无论如何,任何朝着正确方向轻推都会很棒,因为我已经坚持了几天。谢谢!

  • 当您收到 500 错误时,您需要检查服务器错误日志以查看详细原因。
  • xkcd.com/327敞开大门

标签: javascript node.js node-sqlite3


【解决方案1】:

据我所见,您确实在导入“询问”发挥你的作用“登记”页。但是你设置了一个名字“D b”给它。

var db = require('../public/javascripts/dbController');

但你不是在导出“db”,而是在导出“query”:

module.exports = query;

但这不是真正的问题,您可以将其称为“myRandomNameImport”,它仍然可以工作。问题是您正在访问不存在的“db”属性。

db.query(sql); /* <- db.query does not exist.
                * Try db(sql) instead. */

“db”没有任何名为“query”的属性,您尝试使用的功能是“db”。

function register(request) {

  let username = request.login;
  let password = request.password;

  let sql = "INSERT INTO users (user_username, user_password, user_status) VALUES ('"+username+"','"+password+"', 1);";
  console.log("query");
  db(sql); /*<- Just call db()*/
}

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多