Heim > Web-Frontend > js-Tutorial > Hauptteil

Erstellen Sie eine Blog-Anwendungs-Homepage mit Angular und MongoDB

WBOY
Freigeben: 2023-09-03 23:49:01
Original
1177 Leute haben es durchsucht

Im ersten Teil dieser Tutorialreihe haben Sie gelernt, wie Sie mit der Erstellung einer Angular-Webanwendung beginnen. Sie haben gelernt, wie Sie die Anwendung einrichten und die Anmeldekomponente erstellen.

In diesem Teil der Serie beschreiben Sie weiter die REST-API, die für die Interaktion mit der Bankseite von MongoDB erforderlich ist. Außerdem erstellen Sie die Home-Komponente, die angezeigt wird, nachdem sich der Benutzer erfolgreich angemeldet hat.

Loslegen Sie

Beginnen wir mit dem Klonen des Quellcodes für den ersten Teil dieser Tutorialreihe.

git clone https://github.com/royagasthyan/AngularBlogApp-Login AngularBlogApp-Home
Nach dem Login kopieren

Navigieren Sie zum Projektverzeichnis und installieren Sie die erforderlichen Abhängigkeiten.

cd AngularBlogApp-Home/client
npm install
Nach dem Login kopieren

Nach der Installation der Abhängigkeiten starten Sie den Anwendungsserver neu.

npm start
Nach dem Login kopieren

Stellen Sie Ihren Browser auf http://localhost:4200 und die Anwendung sollte ausgeführt werden.

Login-REST-API erstellen

Ordner im Projektordner AngularBlogApp-Home 中,创建另一个名为 server. Sie schreiben eine REST-API mit Node.js.

Navigieren Sie zum Ordner server und initialisieren Sie das Projekt.

cd server
npm init
Nach dem Login kopieren

Geben Sie die erforderlichen Details ein und schon sollte Ihr Projekt initialisiert sein.

Sie werden Express 框架来创建服务器。使用以下命令安装 Express:

verwenden
npm install express --save
Nach dem Login kopieren

Installieren Sie die Express 后,创建一个名为 app.js Dateien. Dies ist die Root-Datei des Node.js-Servers.

So sieht die app.js-Datei aus:

const express = require('express')
const app = express()

app.get('/api/user/login', (req, res) => {
    res.send('Hello World!')
})

app.listen(3000, () => console.log('blog server running on port 3000!'))
Nach dem Login kopieren

Wie im Code oben gezeigt, importieren Sie express in express 导入到 app.js 中。使用 express,您创建了一个应用程序 app. Mit express erstellen Sie eine Anwendung app.

Verwenden Sie app,您公开了一个端点 /api/user/login und es wird eine Meldung angezeigt. Starten Sie den Node.js-Server mit dem folgenden Befehl:

node app.js
Nach dem Login kopieren
Nach dem Login kopieren

Stellen Sie Ihren Browser auf http://localhost:3000/api/user/login und Sie sollten die Meldung sehen.

Sie werden die 用户名 密码 参数从 Angular 服务向服务器发出 POST-Anfrage verwenden. Daher müssen die Anforderungsparameter analysiert werden.

Installieren body-parser, die Body-Parsing-Middleware von Node.j zum Parsen von Anforderungsparametern.

npm install body-parser --save
Nach dem Login kopieren

Nachdem die Installation abgeschlossen ist, importieren Sie sie app.js .

const bodyParser = require('body-parser')
Nach dem Login kopieren

Fügen Sie den folgenden Code zur app.js-Datei hinzu.

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended : false}))
Nach dem Login kopieren

Die beiden oben genannten body-parser 选项返回仅解析 jsonurlencoded 主体的中间件,并且仅查看 Content-Type 标头匹配的请求type Optionen geben Middleware zurück, die nur json- und urlencoded-Körper analysiert und nur Content-Type-Tags betrachtet Header, der der type-Option der Anfrage entspricht.

Sie werden Mongoose 与 Node.js 中的 MongoDB 进行交互。因此,使用节点包管理器(npm)安装 Mongoose verwenden.

npm install mongoose --save
Nach dem Login kopieren

Nach der Installation von mongoose importieren Sie es app.js.

const mongoose = require('mongoose');
Nach dem Login kopieren

Definieren Sie die MongoDB-Datenbank-URL in app.js.

const url = 'mongodb://localhost/blogDb';
Nach dem Login kopieren

Stellen Sie mit Mongoose eine Verbindung zur MongoDB-Datenbank her. Es sieht so aus:

app.post('/api/user/login', (req, res) => {
    mongoose.connect(url, function(err){
		if(err) throw err;
		console.log('connected successfully, username is ',req.body.username,' password is ',req.body.password);
	});
})
Nach dem Login kopieren

Wenn eine Verbindung hergestellt wird, wird die Nachricht mit 用户名 密码 protokolliert.

So sieht die app.js-Datei aus:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const mongoose = require('mongoose');
const url = 'mongodb://localhost/blogDb';

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended : false}))

app.post('/api/user/login', (req, res) => {
    mongoose.connect(url, function(err){
    	if(err) throw err;
		console.log('connected successfully, username is ',req.body.username,' password is ',req.body.password);
	});
})

app.listen(3000, () => console.log('blog server running on port 3000!'))
Nach dem Login kopieren

Starten Sie den Knotenserver mit dem folgenden Befehl neu:

node app.js
Nach dem Login kopieren
Nach dem Login kopieren

Um von einer Angular-Anwendung aus eine Verbindung zu einem Knotenserver herzustellen, müssen Sie einen Proxy einrichten. Dateien in client/src 文件夹中创建一个名为 proxy.json. Es sieht so aus:

{
    "/api/*": {
		"target": "http://localhost:3000",
		"secure": "false"
	}
}
Nach dem Login kopieren

Ändern Sie die Clientdatei package.json, um die Proxydatei zum Starten der Anwendung zu verwenden.

"start": "ng serve --proxy-config proxy.json"
Nach dem Login kopieren

Änderungen speichern und Client-Server starten.

npm start
Nach dem Login kopieren

Wählen Sie in Ihrem Browser http://localhost:4200 und geben Sie Ihren Benutzernamen und Ihr Passwort ein. Klicken Sie auf die Schaltfläche „Anmelden“ und Sie sollten die Parameter in der Knotenkonsole anmelden.

Benutzeranmeldung überprüfen

Um Mongoose für die Interaktion mit MongoDB zu verwenden, müssen Sie das Schema definieren und ein Modell erstellen. Erstellen Sie im Ordner server 文件夹内,创建一个名为 model einen Ordner mit dem Namen model.

In model 文件夹内创建一个名为 user.js 的文件。将以下代码添加到 user.js Datei:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// create a schema
const userSchema = new Schema({
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  name: { type: String }
}, { collection : 'user' });

const User = mongoose.model('User', userSchema);

module.exports = User;
Nach dem Login kopieren

Wie im obigen Code gezeigt, importieren Sie Mungo in das user.js 中。您使用 mongoose schema 创建了 userSchema,并使用 mongoose 模型创建了 User-Modell.

user.js 文件导入到 app.js 文件中。

const User = require('./model/user');
Nach dem Login kopieren

在查询 MongoDB user 集合之前,您需要创建该集合。输入 mongo 转到 MongoDB shell。使用以下命令创建集合 user

db.createCollection('user')
Nach dem Login kopieren

插入您要查询的记录。

 db.user.insert({
     name: 'roy agasthyan',
     username: 'roy',
     password: '123'
 })
Nach dem Login kopieren

现在,一旦 mongoose 连接到 MongoDB,您将使用传入的 用户名 密码 从数据库中找到记录。API 如下所示:

app.post('/api/user/login', (req, res) => {
    mongoose.connect(url,{ useMongoClient: true }, function(err){
		if(err) throw err;
		User.find({
			username : req.body.username, password : req.body.password
		}, function(err, user){
			if(err) throw err;
			if(user.length === 1){	
				return res.status(200).json({
					status: 'success',
					data: user
				})
			} else {
				return res.status(200).json({
					status: 'fail',
					message: 'Login Failed'
				})
			}
			
		})
	});
})
Nach dem Login kopieren

如上面的代码所示,一旦收到数据库的响应,就会将其返回给客户端。

保存以上更改并尝试运行客户端和服务器。输入用户名 roy 和密码 123 ,您应该能够在浏览器控制台中查看结果。

重定向到主页组件

用户验证成功后,您需要将用户重定向到 Home 组件。因此,让我们首先创建 Home 组件。

src/app 文件夹中创建一个名为 Home 的文件夹。创建一个名为 home.component.html 的文件并添加以下 HTML 代码:

<header class="header clearfix">
    <nav>
        <ul class="nav nav-pills float-right">
            <li class="nav-item">
                <a class="nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Add</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Logout</a>
            </li>
        </ul>
    </nav>
    <h3 class="text-muted">Angular Blog App</h3>
</header>

<main role="main">

    <div class="jumbotron">
        <h1 class="display-3">Lorem ipsum</h1>
        <p class="lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
        <p><a class="btn btn-lg btn-success" href="#" role="button">Read More ...</a></p>
    </div>

    <div class="row marketing">
        <div class="col-lg-6">
            <h4>Subheading</h4>
            <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>

            <h4>Subheading</h4>
            <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p>

            <h4>Subheading</h4>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p>
        </div>

        <div class="col-lg-6">
            <h4>Subheading</h4>
            <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>

            <h4>Subheading</h4>
            <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p>

            <h4>Subheading</h4>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p>
        </div>
    </div>

</main>

<footer class="footer">
    <p>&copy; Company 2017</p>
</footer>
Nach dem Login kopieren

创建一个名为 home.component.css 的文件并添加以下 CSS 样式:

.header,
.marketing,
.footer {
  padding-right: 1rem;
  padding-left: 1rem;
}

/* Custom page header */
.header {
  padding-bottom: 1rem;
  border-bottom: .05rem solid #e5e5e5;
}

.header h3 {
  margin-top: 0;
  margin-bottom: 0;
  line-height: 3rem;
}

/* Custom page footer */
.footer {
  padding-top: 1.5rem;
  color: #777;
  border-top: .05rem solid #e5e5e5;
}

/* Customize container */
@media (min-width: 48em) {
  .container {
    max-width: 46rem;
  }
}
.container-narrow > hr {
  margin: 2rem 0;
}

/* Main marketing message and sign up button */
.jumbotron {
  text-align: center;
  border-bottom: .05rem solid #e5e5e5;
}
.jumbotron .btn {
  padding: .75rem 1.5rem;
  font-size: 1.5rem;
}

/* Supporting marketing content */
.marketing {
  margin: 3rem 0;
}
.marketing p + h4 {
  margin-top: 1.5rem;
}

/* Responsive: Portrait tablets and up */
@media screen and (min-width: 48em) {
  /* Remove the padding we set earlier */
  .header,
  .marketing,
  .footer {
    padding-right: 0;
    padding-left: 0;
  }

  /* Space out the masthead */
  .header {
    margin-bottom: 2rem;
  }

  .jumbotron {
    border-bottom: 0;
  }
}
Nach dem Login kopieren

创建名为 home.component.ts 的组件文件并添加以下代码:

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent {
  
}
Nach dem Login kopieren

如上面的代码所示,您刚刚使用 @Component 装饰器创建了 HomeComponent 并指定了 选择器 , templateUrlstyleUrls

HomeComponent 添加到 NgModules 中的 app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ROUTING } from './app.routing';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';

import { RootComponent } from './root/root.component';
import { LoginComponent } from './login/login.component';
import { HomeComponent } from './home/home.component';


@NgModule({
  declarations: [
      RootComponent,
    LoginComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    ROUTING,
    FormsModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [RootComponent]
})
export class AppModule { }
Nach dem Login kopieren

app.routing.ts中导入HomeComponent,并为home定义路由。

import { RouterModule, Routes } from '@angular/router';
import { ModuleWithProviders } from '@angular/core/src/metadata/ng_module';

import { LoginComponent } from './login/login.component';
import { HomeComponent } from './home/home.component';

export const AppRoutes: Routes = [
    { path: '', component: LoginComponent },
	{ path: 'home', component: HomeComponent }
];

export const ROUTING: ModuleWithProviders = RouterModule.forRoot(AppRoutes);
Nach dem Login kopieren

login.component.ts 文件中的 validateLogin 方法中,成功验证后会将用户重定向到 HomeComponent。要重定向,您需要导入 Angular Router

import { Router } from '@angular/router';
Nach dem Login kopieren

如果 API 调用的响应成功,您将使用 Angular Router 导航到 HomeComponent

if(result['status'] === 'success') {
  this.router.navigate(['/home']);
} else {
  alert('Wrong username password');
}
Nach dem Login kopieren

以下是 login.component.ts 文件的外观:

import { Component } from '@angular/core';
import { LoginService } from './login.service';
import { User } from '../models/user.model';
import { Router } from '@angular/router';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css'],
  providers: [ LoginService ]
})
export class LoginComponent {

  public user : User;

  constructor(private loginService: LoginService, private router: Router) {
      this.user = new User();
  }

  validateLogin() {
  	if(this.user.username && this.user.password) {
  		this.loginService.validateLogin(this.user).subscribe(result => {
        console.log('result is ', result);
        if(result['status'] === 'success') {
          this.router.navigate(['/home']);
        } else {
          alert('Wrong username password');
        }
        
      }, error => {
        console.log('error is ', error);
      });
  	} else {
  		alert('enter user name and password');
  	}
  }

}
Nach dem Login kopieren

保存以上更改并重新启动服务器。使用现有的用户名和密码登录应用程序,您将被重定向到 HomeComponent

使用 Angular 和 MongoDB 构建博客应用程序主页

总结

在本教程中,您了解了如何编写用于用户登录的 REST API 端点。您学习了如何使用 Mongoose 从 Node.js 与 MongoDB 进行交互。成功验证后,您了解了如何使用 Angular Router 导航到 HomeComponent

您学习编写 Angular 应用程序及其后端的体验如何?请在下面的评论中告诉我们您的想法和建议。

本教程的源代码可在 GitHub 上获取。

Das obige ist der detaillierte Inhalt vonErstellen Sie eine Blog-Anwendungs-Homepage mit Angular und MongoDB. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage