1, analyse d'ouverture
Bonjour à tous, M. Big Bear est de nouveau là. Je n'ai pas écrit de blog hier à cause de questions personnelles. Aujourd'hui, j'ai un autre article sur l'écriture d'une petite application de bloc-notes. 🎜>
J'ai également présenté l'utilisation du middleware "Connect" et l'utilisation de "Mongodb". Aujourd'hui, je vais combiner ces deux middlewares et écrire un exemple pratique, je vais continuer à les améliorer et à les reconstruire et j'ai atteint
.
Objectif d'apprentissage complet. Bon, arrêtons de dire des bêtises et passons directement au sujet.
2. Analyse de la demande
(1), fonctions d'enregistrement et de connexion de l'utilisateur (aucun scénario d'interaction complexe impliqué, l'utilisateur déterminera s'il existe déjà lors de l'inscription).
(2), l'utilisateur se connecte avec succès et entre dans l'arrière-plan du système de gestion de notes (ajouter, supprimer, modifier et vérifier les fonctions du module de notes).
(3), les utilisateurs peuvent avoir une simple division d'autorisation (administrateur, utilisateur enregistré).
(4), l'interface est relativement simple et axée sur l'apprentissage.
3. Commencez à concevoir l'application (Partie 1)
(1), créez une page de connexion utilisateur, le code est le suivant :
Copier le code Le code est le suivant :
Bigbear记事本应用登录
Bigbear记事本应用登录
效果图:
(2),建立用户注册页面,代码如下:
Bigbear记事本应用注册
Bigbear记事本应用注册
效果图:
(3),建立"Mongodb"连接代码,如下:
var mongodb = require("mongodb") ;
var serveur = nouveau mongodb.Server("localhost",27017,{
auto_reconnect : vrai
}) ;
var conn = new mongodb.Db("bb",server,{
sûr : vrai
}) ;
conn.open(fonction(erreur,db){
if(error) renvoie une erreur ;
console.info("mongodb connecté !") ;
}) ;
exports = module.exports = conn ;
(4),建立模型实体类« Utilisateur »,如下:
var conn = require("../conn") ;
fonction Utilisateur(utilisateur){
this.name = utilisateur["name"] ;
this.password = utilisateur["mot de passe"] ;
} ;
User.prototype.save = function(callback){
var ça = ceci ;
conn.collection("utilisateurs",{
sûr : vrai
},fonction (erreur,collection){
if(error) return conn.close() ;
collection.findOne({ // 判断此用户是否存在
nom : ce.nom
},fonction (erreur,utilisateur){
if(error) return conn.close() ;
si(!utilisateur){
collection.insert({
nom : ce.nom "" ,
mot de passe : that.password ""
},{
sûr : vrai
},fonction (erreur,utilisateur){
if(error) return conn.close() ;
rappel && rappel(utilisateur) ;
conn.close() ;
}) ;
>
autre{
callback("L'utilisateur s'est inscrit !") ;
>
}) ;
}) ;
} ;
User.login = function(nom, mot de passe, rappel){
conn.collection("utilisateurs",{
sûr : vrai
},fonction (erreur,collection){
if(error) return conn.close() ;
collection.findOne({
nom : nom,
mot de passe : mot de passe
},fonction (erreur,utilisateur){
if(error) return conn.close() ;
rappel && rappel(utilisateur) ;
conn.close() ;
}) ;
}) ;
} ;
exports = module.exports = Utilisateur ;
效果图:
(5),建立应用程序« application »,如下:
// app.js
var connect = require("./lib/connect") ;
var utilisateur = require("./models/user") ;
var app = connect.createServer() ;
app .use(connect.logger("dev"))
.use(connect.query())
.use(connect.bodyParser())
.use(connect.cookieParser())
.use(connect.static(__dirname "/views"))
.use(connect.static(__dirname "/public"))
.use("/login",function(requête, réponse, suivant){
var nom = request.body["name"] ;
var mot de passe = request.body["password"] ;
user.login (nom, mot de passe, fonction (utilisateur) {
si (utilisateur) {
réponse.end("Bienvenue dans :" utilisateur["nom"] " ^_^ ......") ;
>
autre{
réponse.end("Utilisateur :" nom " Pas d'inscription !") ;
>
}) ;
})
.use("/reg",function(requête, réponse, suivant){
var nom = request.body["name"] ;
var mot de passe = request.body["password"] ;
nouvel utilisateur ({
nom : nom,
mot de passe : mot de passe
}).save(fonction(utilisateur){
si(utilisateur && utilisateur["nom"]){
réponse.end("Utilisateur :" nom "Inscription terminée !") ;
>
autre{
réponse.end("Utilisateur : " nom "est enregistré !") ;
>
}) ;
})
.écouter(8888,fonction(){
console.log("Serveur Web exécuté sur le port ---> 8888 .") ;
}) ;
说明一下:
(1)« connect.query() »------处理« Get »请求参数解析。
(2)« connect.bodyParser() »------处理« Post »请求参数解析。
(3)« connect.static(__dirname "/views"),connect.static(__dirname "/public")”
分别代表模板视图« html »以及静态资源如« js,css,jpg,gif »的资源目录。
以下是这个应用的目录结构:
四,总结一下
(1),掌握NodeJs操作数据库的基本操作语句。
(2),划分层级,如模型,视图,路由。
(3),不断优化和修改本文的例子(比如注册验证用户是否存在,可以独立出"UserManager" et "UserManager"层代理完成用户验证和保存的动作)。
(4),明天继续完成后续的功能,尽请期待。