Heim Web-Frontend js-Tutorial NodeJS-Tutorial zum Erstellen eines einfachen Artikels zur Veröffentlichung von system_node.js

NodeJS-Tutorial zum Erstellen eines einfachen Artikels zur Veröffentlichung von system_node.js

May 16, 2016 pm 04:30 PM
nodejs

Vorwort

Wir werden heute ein einfaches Pressemitteilungssystem erstellen. Die erste Stufe des Systems muss nicht allzu schwierig sein. Es hat hauptsächlich die folgenden Funktionen

① Verwaltung von Nachrichtentypen

② Nachrichtenverwaltung (mit Bild-Upload-Funktion)

③ Durchsuchen von Nachrichten

Obwohl es nicht viele Funktionen gibt, deckt es auch viele grundlegende Vorgänge ab. Das Programm fügt nur Anhänge hinzu, löscht sie, prüft sie und lädt sie hoch, was ausreichend ist. Beginnen wir also noch heute mit unserer Studie

Vorbereitung

Nach den gestrigen Problemen haben wir bereits NodeJS- und MongoDB-Umgebungen. Jetzt können wir direkt neue Projektdateien und Datenbankdateien erstellen

Der erste Schritt besteht darin, die Eingabeaufforderung zu öffnen, zum Laufwerk D zu wechseln und

einzugeben

Code kopieren Der Code lautet wie folgt:
D:>express -e news
Dann baut das System automatisch und problemlos die Grundumgebung auf

Offensichtlich sind viele Modulabhängigkeiten nicht vorhanden. Machen Sie zu diesem Zeitpunkt einfach den Test der gestrigen package.json:

Code kopieren Der Code lautet wie folgt:
{
„name“: „Anwendungsname“,
„Version“: „0.0.1“,
„privat“: wahr,
„Skripte“: {
„start“: „node app.js“
},
„Abhängigkeiten“: {
„express“: „3.4.8“,
„ejs“: „*“,
„mongodb“: „*“
}
}

Anschließend wechseln Sie in das Projektverzeichnis:

Code kopieren Der Code lautet wie folgt:
nmp install
Nachdem alle abhängigen Dateien heruntergeladen wurden, geben wir

ein

Code kopieren Der Code lautet wie folgt:
D:news>node app
Express-Server überwacht Port 3000


Also lief unser Programm problemlos. Als wir die URL öffneten, stellten wir fest, dass es tatsächlich kein Problem gab

PS: Hier gibt es ein Problem, das Aufmerksamkeit erfordert. Die von uns heruntergeladene Datei ist nicht UTF-8-codiert, daher muss die Dateicodierung möglicherweise von Ihnen vereinheitlicht werden.

Wenn das Programm ausgeführt wird, ist eine datenbankbezogene Konfiguration erforderlich

① Erstellen Sie zunächst einen neuen News-Ordner im MongoDB-Verzeichnis

② Fügen Sie die Konfigurationsdatei „settings.js“ zum Projekt hinzu

Code kopieren Der Code lautet wie folgt:
module.exports = {
cookieSecret: 'myNews',
db: 'news',
Host: 'localhost'
};

③ Erstellen Sie ein neues Modellverzeichnis und eine neue db.js

Code kopieren Der Code lautet wie folgt:
var Settings = require('../settings'),
Db = require('mongodb').Db,
Connection = require('mongodb').Connection,
Server = require('mongodb').Server;
module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT), {safe: true });

④ Erstellen Sie ein neues news.bat-Programm auf dem Desktop

Code kopieren Der Code lautet wie folgt:
d:mongodbbinmongod.exe -dbpath d:mongodbnews
Um die Datenbank in Zukunft zu starten, müssen wir sie nur noch ausführen. Damit sind unsere vorbereitenden Vorbereitungen im Grunde abgeschlossen

Aber hier gibt es zwei ärgerliche Dinge: Zum einen ist es nervig, die Nachrichtensendung jedes Mal zu starten, und zum anderen muss man neu starten, um etwas zu ändern. Deshalb werden wir diese beiden Probleme hier zuerst lösen

① Erstellen Sie eine neue news_app.bat auf dem Desktop und führen Sie sie später aus, um das Programm zu starten

Code kopieren Der Code lautet wie folgt:
node d:newsapp

② Supervisor ist ein Prozessschutzprogramm. Wir können ihn verwenden, um das Programm neu zu starten und dann unsere node_app.bat anzupassen

Code kopieren Der Code lautet wie folgt:
Supervisor d:newsapp
Natürlich müssen Sie es vorher installieren:

Code kopieren Der Code lautet wie folgt:
npm install -g supervisor
Danach ist nach dem Ändern der Datei kein manueller Neustart erforderlich (news_app muss im Projektverzeichnis abgelegt werden), daher endet die Vorbereitungsarbeit hier

Projektstruktur

Nach dem ersten Schritt müssen wir über die Projektstruktur nachdenken

① Die Startseite ist ein Index, in dem alle Nachrichtentypen und Nachrichtenelemente aufgelistet werden

② Jede Nachricht verfügt über drei Schaltflächen: Bearbeiten/Löschen/Anzeigen

③ Auf der Startseite gibt es eine Schaltfläche zum Hinzufügen von Nachrichten (Sie können beim Hinzufügen Bilder hochladen)

Grundfunktionen sind wie oben

Also haben wir die Routing-Funktion in der App entfernt und alle Routen in den Index aufgenommen

Code kopieren Der Code lautet wie folgt:
//Füge die Routing-Funktion in den Index ein
//app.get('/',routes.index);
//app.get('/users', user.list);
Routen(App);

Code kopieren Der Code lautet wie folgt:
module.exports = Funktion (App) {
//Homepage, jetzt auch die Homepage
app.get('/', Funktion (req, res) {
res.render('index', { title: 'Express' });
});
app.get('/add', function (req, res) {
res.send('News-Anfrage hinzufügen');
});
app.get('/delete', function (req, res) {
res.send('Newsanfrage löschen');
});
app.get('/view', function (req, res) {
res.send('News-Anfrage anzeigen');
});
app.get('/update', function (req, res) {
res.send('Nachrichtenanfrage ändern');
});
};

Der erste Schritt ist so einfach, da das Hinzufügen von Nachrichten eine separate Seite haben sollte und das Klicken auf die Schaltfläche „Hinzufügen“ eine andere Verarbeitung zur Folge hat, sodass jede Anfrage intern aufgeschlüsselt werden muss. Die aktuellen Vorschriften lauten wie folgt:

/ Standardseite, die alle Genres und Nachrichten anzeigt, mit einer Schaltfläche zum Löschen

/add Rufen Sie die Seite zum Hinzufügen von Nachrichten auf

/addNews Nachrichtenspezifische Beitragsanfrageadresse hinzufügen (Antwort beim Klicken auf die Schaltfläche)

/delete Newsanfrage löschen

/spezifische Nachrichtenabfrage anzeigen

Also habe ich die obige Route leicht modifiziert:

Code kopieren Der Code lautet wie folgt:
module.exports = Funktion (App) {
//Homepage, jetzt auch die Homepage
app.get('/', Funktion (req, res) {
res.render('index', { title: 'Express' });
});
app.get('/add', function (req, res) {
res.send('Neuigkeitsseite hinzufügen');
});
app.post('/addNews', function (req, res) {
res.send('Anfrage zum Hinzufügen von Nachrichten wird bearbeitet');
});
app.get('/delete', function (req, res) {
res.send('Newsanfrage löschen');
});
app.get('/view', function (req, res) {
res.send('News-Anfrage anzeigen');
});
};

Wir müssen also mehrere neue Vorlagen erstellen, um unsere Webseiten zu organisieren. Hier trennen wir nicht den Kopf und das Ende, sondern nur die einfachste Seite

Zwei Vorlagendateien hinzugefügt, add und view, die sich vorübergehend genauso verhalten wie index.ejs, und Navigation geändert

Code kopieren Der Code lautet wie folgt:

module.exports = Funktion (App) {
//Homepage, jetzt auch die Homepage
app.get('/', Funktion (req, res) {
res.render('index', { title: 'Express' });
});
app.get('/add', function (req, res) {
res.render('add', { title: 'News-Seite hinzufügen' });
});
app.post('/addNews', function (req, res) {
res.send('Anfrage zum Hinzufügen von Nachrichten wird bearbeitet');
});
app.get('/delete', function (req, res) {
res.send('Newsanfrage löschen');
});
app.get('/view', function (req, res) {
res.render('view', { title: 'News-Anfrage anzeigen' });
});
};

Dies ist das Ende der Projektstruktur

Datenoperation

Nachdem die Gesamtstruktur fertig ist, müssen wir Datenoperationen durchführen:

① Daten hinzufügen (Nachrichten hinzufügen)

② Daten anzeigen (Nachrichten anzeigen)

③ Daten löschen (Nachrichten löschen)

Ursprünglich ging es auch um Typoperationen, aber als ich es tat, konnte ich es nicht herausfinden. Ich lasse es vorerst in Ruhe, weil man beim ersten Mal leicht verwirrt wird

Neuigkeiten hinzufügen

Hier verwenden wir keine Formularübermittlung, wir verwenden Ajax... Hier stellen wir die Zepto-Bibliothek vor, damit unsere Seite so aussieht

Code kopieren Der Code lautet wie folgt:





                                                                                                     




                                                                                               

Titel:


Inhalt:


           






Obwohl es noch kein Request-Response-Programm gibt, werden die Daten nicht verarbeitet und wir haben hier keine Anhänge (nur ein Anhang ist jetzt erlaubt), also ändern wir den Code und fügen Bilder hinzu:

PS: Das Schwierigere ist, dass die Ajax-Verarbeitung des Bildes etwas mühsam ist, also wechseln wir einfach zurück zur Formularoperation, sonst dauert es lange ...

Code kopieren Der Code lautet wie folgt:



   
        <%= title %>
   


   


        <%= title %>


   

   

        Hinweis:
   

   

        图片:
   

   

        内容:
   

   

       
   

   



这个样子就不需要过多的考虑附件问题, 先暂时如此吧, 现在先处理请求程序,这里先在public里面新建news文件夹用于存储其图片

Modell

在models文件夹新增news.js文件,为其构建实体,并赋予新增查询相关操作:

复制代码 代码如下:

var mongodb = require('./db');

Funktion News(Titel, Inhalt, Bild) {
  this.title = title;
  this.content = content;
  this.pic = pic;//保存存储路径
};
module.exports = Neuigkeiten;
//存储数据
News.prototype = {
  speichern: Funktion (Rückruf) {
    var date = new Date();
    var time = {
      Datum: Datum,
      Jahr: date.getFullYear(),
      Monat: date.getFullYear() "-" (date.getMonth() 1),
      Tag: date.getFullYear() "-" (date.getMonth() 1) "-" date.getDate(),
      Minute: date.getFullYear() "-" (date.getMonth() 1) "-" date.getDate() " "
      date.getHours() ":" (date.getMinutes() < 10 ? '0' date.getMinutes() : date.getMinutes())
    }
    //数据存储对象
    var news = {
      Titel: this.title,
      Inhalt: this.content,
      pic: this.pic, //图片处理最后来说,现在先乱存
      Zeit: Zeit
    };
    //打开数据连接,打开就是一个回调......
    mongodb.open(function (err, db) {
      //错误就退出
      if (irr) {
        Rückruf(err);
      }
      //打开news集合
      db.collection('news', function (err, Collection) {
        if (irr) {
          mongodb.close();
          Rückruf(err);
        }
        //写入集合(写入数据库)
        Collection.insert(news, {safe: true }, function (err) {
          Rückruf(err);
        });
        callback(null);//err为null
      });
    });
  }
};

Das Programm zum Schreiben in die Datenbank ist also da. Hier versuchen wir zu sehen, ob wir es in die Datenbank einfügen können. Natürlich müssen wir das Routing-Programm ändern

PS: Natürlich kann man in der Routing-Abteilung nicht zu viel Logikcode schreiben. Diese Datei muss in Zukunft getrennt werden

Zu diesem Zeitpunkt muss die Logik in /addNews geändert werden

Code kopieren Der Code lautet wie folgt:
app.post('/addNews', function (req, res) {
var title = req.body.title;
var content = req.body.content;
var pic = req.body.pic;
var news = neue News(Titel, Inhalt, Bild)
news.save(function (err, data) {
res.send(data);
})
});

Nach der Überprüfung ist das Problem nicht groß. Was jetzt gelöst werden muss, ist das Bindungsproblem

Bilder hochladen

Express selbst unterstützt die Bild-Upload-Funktion. Express analysiert den Anforderungstext über bodyParser und lädt dann intern Dateien darüber hoch.

Ändern Sie hier app.use(express.bodyParser()) in app.js in:

Code kopieren Der Code lautet wie folgt:app.use(express.bodyParser({ keepExtensions: true , uploadDir: './public/news' }));
Öffnen Sie index.js und fügen Sie vorne eine Codezeile hinzu:

Code kopieren Der Code lautet wie folgt:fs = require('fs'),
Ändern Sie die Indexdatei:

app.post('/addNews', function (req, res) {
for (var i in req.files) {
If (req.files[i] == 0) {
//Eine Datei synchron löschen
         fs.unlinkSync(req.files[i].path);
console.log('Erfolg hat eine leere Datei entfernt');
} sonst {
var path = './public/news/' req.files[i].name;
//Eine Datei mit der synchronen Methode umbenennen
           fs.renameSync(req.files[i].path, path);
console.log('suncess hat eine Datei umbenannt');
}
}
// var title = req.body.title;
// var content = req.body.content;
// var pic = req.body.pic;
// var news = new News(title, content, pic)
// news.save(function (err, data) {
// res.send(data);
// })
});


Wählen Sie zu diesem Zeitpunkt die Datei aus und klicken Sie auf „Neuigkeiten hinzufügen“. Unsere Datei wird dann hochgeladen

Zu diesem Zeitpunkt muss ich nur den Dateinamen in der Datenbank aufzeichnen, und im Dateiverzeichnis befinden sich Bilder

Code kopieren Der Code lautet wie folgt:

app.post('/addNews', function (req, res) {
var pic = null;
for (var i in req.files) {
If (req.files[i] == 0) {
//Eine Datei synchron löschen
         fs.unlinkSync(req.files[i].path);
console.log('Erfolg hat eine leere Datei entfernt');
} sonst {
var path = './public/news/' req.files[i].name;
//Eine Datei mit der synchronen Methode umbenennen
           fs.renameSync(req.files[i].path, path);
console.log('suncess hat eine Datei umbenannt');
}
Pic = req.files[i].name;
}
var title = req.body.title;
var content = req.body.content;
var news = neue News(Titel, Inhalt, Bild)
news.save(function (err, data) {
res.send(data);
})
res.send('Anfrage erfolgreich, zurück zur Startseite');
});

Es gibt Daten in der Datenbank und es gibt Dateien in unserem Verzeichnis. Jetzt müssen wir nur noch die Daten auslesen

PS: Brüder drängen mich, während der Feiertage etwas trinken zu gehen

Daten lesen

Der zweite Schritt besteht natürlich darin, die Daten zu lesen. Der erste Schritt besteht darin, die Daten auf der Startseite zu lesen:

Code kopieren Der Code lautet wie folgt:

var mongodb = require('./db');
Funktion News(Titel, Inhalt, Bild) {
this.title = title;
this.content = content;
this.pic = pic;//Speicherpfad speichern
};
module.exports = Neuigkeiten;
//Speicherdaten
News.prototype = {
speichern: Funktion (Rückruf) {
var date = new Date();
//Datenspeicherobjekt
var news = {
Titel: this.title,
Inhalt: this.content,
Bild: this.pic, // Zum Schluss Bildbearbeitung, jetzt nach dem Zufallsprinzip speichern
Datum: Datum
};
//Öffne die Datenverbindung, das Öffnen ist ein Rückruf...
mongodb.open(function (err, db) {
//Beenden, wenn ein Fehler auftritt
Wenn (irrt) {
         Rückruf (err);
}
//Öffnen Sie die Nachrichtensammlung
db.collection('news', function (err, Collection) {
Wenn (irrt) {
             mongodb.close();
            Rückruf (err);
}
//Sammlung schreiben (in Datenbank schreiben)
        collection.insert(news, {safe: true }, function (err) {
            Rückruf (err);
});
         callback(null); //err ist null
});
});
}
};
//Lesen Sie den Artikel und die zugehörigen Informationen
News.get = Funktion (ID, Rückruf) {
//Datenbank öffnen
mongodb.open(function (err, db) {
Wenn (irrt) {
Rückruf(err);
}
db.collection('news', function (err, Collection) {
Wenn (irrt) {
          mongodb.close();
         Rückruf (err);
}
var query = {};
Wenn (id) {
​​​​ query.id = id;
}
//Artikel basierend auf dem Abfrageobjekt abfragen
Collection.find(query).sort({
Datum: -1
}).toArray(function (err, data) {
          mongodb.close();
Wenn (irrt) {
             Rückruf (err); //Fehlgeschlagen! Fehler zurückgeben
}
​​​​ callback(null, data); //Erfolg! Geben Sie die Ergebnisse der Abfrage in Form eines Arrays zurück
});
});
});
};
news.js

Code kopieren Der Code lautet wie folgt:




   
        <%= title %>
   


   


        <%= title %>


   

            <%for(var k in data) { %>
           

  •            

                   标题: <%=data[k].title %>

               

                  内容:  <%=data[k].content%>

                 

                  附件:

                 

             

              删除
             

             

       
        <%} %>
   


结语

好了,文章发布系统的制作就先到这里了,以后我们再慢慢增加功能,慢慢做美化.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Unterschied zwischen NodeJS und Tomcat Der Unterschied zwischen NodeJS und Tomcat Apr 21, 2024 am 04:16 AM

Die Hauptunterschiede zwischen Node.js und Tomcat sind: Laufzeit: Node.js basiert auf der JavaScript-Laufzeit, während Tomcat ein Java-Servlet-Container ist. E/A-Modell: Node.js verwendet ein asynchrones, nicht blockierendes Modell, während Tomcat synchrones Blockieren verwendet. Parallelitätsbehandlung: Node.js verarbeitet die Parallelität über eine Ereignisschleife, während Tomcat einen Thread-Pool verwendet. Anwendungsszenarien: Node.js eignet sich für Echtzeit-, datenintensive und Anwendungen mit hoher Parallelität, und Tomcat eignet sich für herkömmliche Java-Webanwendungen.

Der Unterschied zwischen NodeJS und VueJS Der Unterschied zwischen NodeJS und VueJS Apr 21, 2024 am 04:17 AM

Node.js ist eine serverseitige JavaScript-Laufzeitumgebung, während Vue.js ein clientseitiges JavaScript-Framework zum Erstellen interaktiver Benutzeroberflächen ist. Node.js wird für die serverseitige Entwicklung verwendet, beispielsweise für die Entwicklung von Back-End-Service-APIs und die Datenverarbeitung, während Vue.js für die clientseitige Entwicklung verwendet wird, beispielsweise für Single-Page-Anwendungen und reaktionsfähige Benutzeroberflächen.

Ist NodeJS ein Backend-Framework? Ist NodeJS ein Backend-Framework? Apr 21, 2024 am 05:09 AM

Node.js kann als Backend-Framework verwendet werden, da es Funktionen wie hohe Leistung, Skalierbarkeit, plattformübergreifende Unterstützung, ein umfangreiches Ökosystem und einfache Entwicklung bietet.

Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Apr 21, 2024 am 05:18 AM

Es gibt zwei npm-bezogene Dateien im Node.js-Installationsverzeichnis: npm und npm.cmd. Die Unterschiede sind wie folgt: unterschiedliche Erweiterungen: npm ist eine ausführbare Datei und npm.cmd ist eine Befehlsfensterverknüpfung. Windows-Benutzer: npm.cmd kann über die Eingabeaufforderung verwendet werden, npm kann nur über die Befehlszeile ausgeführt werden. Kompatibilität: npm.cmd ist spezifisch für Windows-Systeme, npm ist plattformübergreifend verfügbar. Nutzungsempfehlungen: Windows-Benutzer verwenden npm.cmd, andere Betriebssysteme verwenden npm.

So verbinden Sie NodeJS mit der MySQL-Datenbank So verbinden Sie NodeJS mit der MySQL-Datenbank Apr 21, 2024 am 06:13 AM

Um eine Verbindung zu einer MySQL-Datenbank herzustellen, müssen Sie die folgenden Schritte ausführen: Installieren Sie den MySQL2-Treiber. Verwenden Sie mysql2.createConnection(), um ein Verbindungsobjekt zu erstellen, das die Hostadresse, den Port, den Benutzernamen, das Passwort und den Datenbanknamen enthält. Verwenden Sie „connection.query()“, um Abfragen durchzuführen. Verwenden Sie abschließend Connection.end(), um die Verbindung zu beenden.

Ist NodeJS eine Back-End-Entwicklungssprache? Ist NodeJS eine Back-End-Entwicklungssprache? Apr 21, 2024 am 05:09 AM

Ja, Node.js ist eine Backend-Entwicklungssprache. Es wird für die Back-End-Entwicklung verwendet, einschließlich der Handhabung serverseitiger Geschäftslogik, der Verwaltung von Datenbankverbindungen und der Bereitstellung von APIs.

Was sind die globalen Variablen in NodeJS? Was sind die globalen Variablen in NodeJS? Apr 21, 2024 am 04:54 AM

Die folgenden globalen Variablen sind in Node.js vorhanden: Globales Objekt: global Kernmodul: Prozess, Konsole, erforderlich Laufzeitumgebungsvariablen: __dirname, __filename, __line, __column Konstanten: undefiniert, null, NaN, Infinity, -Infinity

Gibt es einen großen Unterschied zwischen NodeJS und Java? Gibt es einen großen Unterschied zwischen NodeJS und Java? Apr 21, 2024 am 06:12 AM

Die Hauptunterschiede zwischen Node.js und Java sind Design und Funktionen: Ereignisgesteuert vs. Thread-gesteuert: Node.js ist ereignisgesteuert und Java ist Thread-gesteuert. Single-Threaded vs. Multi-Threaded: Node.js verwendet eine Single-Threaded-Ereignisschleife und Java verwendet eine Multithread-Architektur. Laufzeitumgebung: Node.js läuft auf der V8-JavaScript-Engine, während Java auf der JVM läuft. Syntax: Node.js verwendet JavaScript-Syntax, während Java Java-Syntax verwendet. Zweck: Node.js eignet sich für I/O-intensive Aufgaben, während Java für große Unternehmensanwendungen geeignet ist.

See all articles