EIn Modul exportieren

  • EIn Modul exportieren

    Hallo Leute,

    ich möchte etwas mit Datenbanken machen und habe mir dazu einen Ordner models anlegt in dem befindet sich eine Datei die ich login_modul genannte habe. Aber irgendwie klappt das noch nicht :(

    Quellcode: login.js

    1. var express = require('express');
    2. var html = require('html');
    3. var path = require('path');
    4. var router = express.Router();
    5. var login_modul = require(__dirname, './models/login_modul');
    6. /* GET home page. */
    7. router.get('/', function(req, res, next) {
    8. res.sendFile(path.join(__dirname, '..', 'public', 'login.html'));
    9. });
    10. router.get('/check', function(req, res, next) {
    11. res.end(login_modul.test());
    12. });
    13. module.exports = router;
    Alles anzeigen

    Quellcode: login_modul.js

    1. var Login_modul = {
    2. test : function(){
    3. return 'Test';
    4. }
    5. }
    6. module.exports = Login_modul;
    Bitte um Hilfe...
  • Du lädst in Zeile 2 ein Modul namens html, welches du jedoch nicht im Code verwendest. Falls du das Modul nicht installiert hast musst du diese Zeile entfernen.

    Das Entscheidende dürfte aber die Zeile 5 sein, dort hast du das path.join() um die beiden Pfad-Bestandteile vergessen. So ist es richtig:

    JavaScript-Quellcode: login.js

    1. var login_modul = require(path.join(__dirname, './models/login_modul'));
    Grüße,
    NodeCode

    NodeCode.de
  • NodeCode schrieb:

    Das Entscheidende dürfte aber die Zeile 5 sein, dort hast du das path.join() um die beiden Pfad-Bestandteile vergessen.
    Alternativ kann man auch einen relativen Pfad anstelle des Absoluten verwenden:

    JavaScript-Quellcode: login.js

    1. const router = require('express').Router()
    2. const path = require('path')
    3. const loginModul = require('./models/login_modul')
    4. router
    5. // GET home page
    6. .get('/', (req, res) => {
    7. res.sendFile(path.join(__dirname, '..', 'public', 'login.html'))
    8. })
    9. // GET login
    10. .get('/check', (req, res) => {
    11. res.end(loginModul.test())
    12. })
    13. module.exports = router
    Alles anzeigen

    Felix K. schrieb:

    Ich möchte ja eigentlich nicht das der Ordner Model erreichbar ist außer für die handler funktion die sie braucht... Kannst du mir das nochmal erklären?
    In express (und Node allgemein) lässt sich nichts ansprechen, was du nicht in einer Route implementiert hast. Der Ordner "Model" sollte also über die Webseite gar nicht zu sehen sein.
    Wenn du also statische Dateien ausliefern willst, solltest du dafür einen eigenen Handler (Middleware) verwenden. In express gibt es dafür
    express.static(). Diesem übergibst du den Namen des Ordners, den du öffentlich machen willst. Die Route unter der die Dateien dann zur Verfügung stehen, hängt von Einhängepunkt ab. Ein Beispiel:

    JavaScript-Quellcode: server.js

    1. 'use strict'
    2. const express = require('express')
    3. const app = express()
    4. // Du kannst auch eigene Middleware schreiben
    5. const authenticate = require('./modules/authenticate')
    6. app
    7. // Login-Router laden
    8. .use(require('./login'))
    9. // (ist equivalent zu ".use('/', require('./login'))")
    10. // den Inhalt des Ordners "public" auf der Webseite zugänglich machen (nur GET)
    11. .use(express.static('public'))
    12. // der Inhalt des Ordners "protected" wird über die Adresse
    13. // "http://localhost:3000/admin/..."
    14. // zugreifbar. Aber nur für die, die "authenticate" durchlässt.
    15. .use('/admin/', authenticate, express.static('protected'))
    16. .listen(3000, () => console.log('Example app listening on port 3000!'))
    Alles anzeigen