2017-02-24 2 views
1

Ich baue ein Projekt mit AdonisJS, und ich möchte es als eine modulare, zweiteilige Anwendung erstellen: Der AdonisJS-Server führt eine Systemsteuerung, und ein benutzerdefiniertes Skript außerhalb des Servers läuft ein IRC Bot. Ich habe versucht, Lucid in das zweite Skript zu laden, so dass ich mit meiner Datenbank interagieren kann, aber es gibt immer nur ein leeres Objekt zurück, {}. Einige Dinge zu beachten:Verwendung von Lucid außerhalb von AdonisJS Controller

  • Ich habe sichergestellt, dass meine Datenbank gefüllt ist.
  • Ich habe Code in meinen Controllern getestet, der funktioniert und Ergebnisse wie erwartet abruft.
  • Das sekundäre Skript bootet alle die gleichen Teile von Adonis wie server.js, ohne den eigentlichen HTTP-Server.
  • Ich habe versucht, dieses Skript an einen HTTP-Server anhängen, aber es machte keinen Unterschied.
  • Ich habe auch versucht, rohe QueryBuilder-Objekte mit den gleichen Ergebnissen zu erstellen.

Hier ist die geringste Menge an Code kann ich zusammen als ein Beispiel setzen:

#!/usr/bin/node 
'use strict' 

const fs = require('fs') 
const bootstrap = require('./bootstrap/bot') 

bootstrap(() => 
{ 
    const AppConfig = use('AppConfig') 
    const Settings = use('App/Model/Settings') 

    const get_settings = function *() { 
     yield Settings.all() 
    } 

    console.log(get_settings()) 
}) 

console.log() druckt {}, obwohl der gleiche Code innerhalb Controller druckt alle Einträge aus der Tabelle der Einstellungen aufgerufen. bootstrap/bot.js ist fast eine exakte Kopie von bootstrap/http.js. Der einzige Unterschied ist, dass kein HTTP-Server gestartet wird.

Ich habe den Quellcode nach Dingen gesucht, die zwischen dem Starten des Servers und dem Ausführen von Controller-Code passieren könnten, um zu sehen, ob etwas Kritisches fehlt, aber ich bin verloren.

Weiß jemand, wie ich meine Lucid-Modelle außerhalb der AdonisJS-Controller verwenden kann?

Antwort

1

Es ist, weil Ihre Funktion ein generator ist, und Sie können einen Generator nur mit dem Schlüssel yield anrufen.

So sollte Ihr console.log() wie console.log(yield get_settings()) aussehen.

Sie können das Paket co verwenden, um die Root-Generator-Funktion zu erstellen.

bootstrap(co(function *() { 
    // ... 
})) 
+0

das half. Vielen Dank – Ali

Verwandte Themen