modul.

  • Författare
  • Meddelande

tbäck

javascript-guru

  • Inlägg: 84
  • Blev medlem: 11 sep 2018, 07:16

modul.

Inlägg11 feb 2019, 18:39

jag får inte modulen att fungera jag vet ej vad jag gör för fel.

min kod är längst ner i filen search.js
Kod: Markera allt
/**
* Show teachers and their departments.
*
* @author Thobias Bäckman
*/
"use strict";

const mysql  = require("promise-mysql");
const config = require("./config.json");


// Read from commandline
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});




/**
* Main function.
*
* @async
* @returns void
*/
(async function() {
    const db = await mysql.createConnection(config);
    let str;

    // Ask question and handle answer in async arrow function callback.
    rl.question("What to search for? ", async (search) => {
        str = await searchTeachers(db, search);
        console.info(str);

        rl.close();
        db.end();
    });
})();



/**
* Output resultset as formatted table with details on a teacher.
*
* @async
* @param {connection} db     Database connection.
* @param {string}     search String to search for.
*
* @returns {string} Formatted table to print out.
*/
async function searchTeachers(db, search) {
    let sql;
    let res;
    let str;
    let like = `%${search}%`;

    console.info(`Searching for: ${search}`);

    sql = `
        SELECT
            akronym,
            fornamn,
            efternamn,
            avdelning,
            lon,
            kompetens,
            fodd
        FROM larare
        WHERE
            akronym LIKE ?
            OR fornamn LIKE ?
            OR efternamn LIKE ?
            OR avdelning LIKE ?
            OR lon = ?
            OR kompetens = ?
        ORDER BY akronym;
    `;
    res = await db.query(sql, [like, like, like, like, search, search]);
    str = teacherAsTable(res);
    return str;
}



/**
* Output resultset as formatted table with details on a teacher.
*
* @param {RowDataPacket} res Resultset with details on a teacher.
*
* @returns {string} Formatted table to print out.
*/

   let utils = require("./module1.js");
   let res;

   res = utils.teacherAsTable(res);
   console.info(res);



koden i module1.js är
Kod: Markera allt
/**
* Show teachers and their departments.
*
* @author Thobias Bäckman
*/
"use strict";



const mysql  = require("promise-mysql");
const config = require("./config.json");

module.exports = {
    "teacherAsTable": teacherAsTable
};


function teacherAsTable(res) {
    let str;

    str  = "+-----------+---------------------+-----------+----------+----------+--------------+\n";
    str += "| Akronym   | Namn                | Avdelning |   Lön    |  Komp    |  Född        |\n";
    str += "|-----------|---------------------|-----------|----------|----------|--------------|\n";
    for (const row of res) {
        str += "| ";
        str += row.akronym.padEnd(10);
        str += "| ";
        str += (row.fornamn + " " + row.efternamn).padEnd(20);
        str += "| ";
        str += row.avdelning.padEnd(10);
        str += "| ";
        str += row.lon.toString().padStart(8);
        str += "| ";
        str += row.kompetens.toString().padStart(10);
        str += "| ";
        str += row.fodd.toString().padStart(12);
        str += " |\n";
    }
    str += "+-----------+---------------------+-----------+----------+----------+--------------+\n";

    return str;
}


kör jag node search.js i terminalen säger den så här:
Kod: Markera allt
/Users/thobias/dbwebb-kurser/databas/me/kmom02/terminal1/module1.js:24
    for (const row of res) {
                      ^

TypeError: res is not iterable
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10828
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: modul.

Inlägg11 feb 2019, 19:00

TypeError: res is not iterable


Det tyder på att res innehåller något som inte är en array. Pröva att skriva ut dess innehåll, det borde vara ett resultset från databasen.

Leta reda på kodraden där res får sitt värde, det borde vararetuvärdet från en funktion som returnerar resultatet från en SELECT-sats.
...
..:
.... /mos

tbäck

javascript-guru

  • Inlägg: 84
  • Blev medlem: 11 sep 2018, 07:16

Re: modul.

Inlägg11 feb 2019, 19:17

den kodraden borde vara denna? som får sitt värde från sql =select
Kod: Markera allt
res = await db.query(sql, [like, like, like, like, search, search]);

vad gör jag med det?=)
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10828
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: modul.

Inlägg11 feb 2019, 19:23

Ser ju bra ut.

Provade du att skriva ut innehållet i res?
...
..:
.... /mos

tbäck

javascript-guru

  • Inlägg: 84
  • Blev medlem: 11 sep 2018, 07:16

Re: modul.

Inlägg11 feb 2019, 19:48

nej, det gjorde jag inte. gör jag det genom:
Kod: Markera allt
console.info(res)
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10828
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: modul.

Inlägg12 feb 2019, 10:22

Ja, pröva så ser du.

Du har läst om detta i artikeln om node.js och mysql, kika här så ser du hur det bör se ut när du skriver ut ett resultset:
https://dbwebb.se/kunskap/mysql-och-nodejs-v2#select

Kika även följande kapitel i artikeln som visar hur du kan förbättre din utskrift.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 8 gäster