ホームページ >ウェブフロントエンド >jsチュートリアル >Angular と MongoDB を使用してブログ アプリケーションのホームページを構築する

Angular と MongoDB を使用してブログ アプリケーションのホームページを構築する

WBOY
WBOYオリジナル
2023-09-03 23:49:011189ブラウズ

このチュートリアル シリーズの最初の部分では、Angular Web アプリケーションの作成を開始する方法を学びました。アプリケーションを設定し、ログイン コンポーネントを作成する方法を学習しました。

シリーズのこのパートでは、MongoDB の銀行側と対話するために必要な REST API についてさらに詳しく説明します。また、ユーザーが正常にログインした後に表示される Home コンポーネントも作成します。

使い始める

このチュートリアル シリーズの最初の部分のソース コードを複製することから始めましょう。

リーリー

プロジェクト ディレクトリに移動し、必要な依存関係をインストールします。

リーリー

依存関係をインストールした後、アプリケーション サーバーを再起動します。

リーリー

ブラウザで http://localhost:4200 を指定すると、アプリケーションが実行されるはずです。

ログインREST APIの作成

プロジェクト フォルダー AngularBlogApp-Home に、server という名前の別のフォルダーを作成します。 Node.js を使用して REST API を作成します。

server フォルダーに移動し、プロジェクトを初期化します。

リーリー

必要な詳細を入力すると、プロジェクトが初期化されます。

Express フレームワークを使用してサーバーを作成します。次のコマンドを使用して Express をインストールします:

リーリー

Express をインストールした後、app.js という名前のファイルを作成します。これは Node.js サーバーのルート ファイルになります。

app.js ファイルは次のようになります: リーリー

上記のコードに示すように、

expressapp.js にインポートします。 express を使用して、アプリケーション app を作成します。

app を使用して、メッセージを表示するエンドポイント /api/user/login を公開します。次のコマンドを使用して Node.js サーバーを起動します: リーリー

ブラウザで http://localhost:3000/api/user/login にアクセスすると、メッセージが表示されるはずです。

Username および Password パラメーターを使用して、Angular サービスからサーバーに POST リクエストを作成します。したがって、リクエストパラメータを解析する必要があります。

インストール

body-parser、これは Node.js ボディ解析ミドルウェアで、リクエスト パラメーターを解析するために使用されます。 リーリー

インストールが完了したら、

app.js にインポートします。 リーリー

次のコードを

app.js ファイルに追加します。 リーリー

上記の 2 つの

body-parser オプションは、json および urlencoded の本体のみを解析し、Content-Type## のみを調べるミドルウェアを返します。 # リクエストの type オプションに一致するヘッダー。 Mongoose

を使用して、Node.js で

MongoDB と対話します。したがって、Node Package Manager (npm) を使用して Mongoose をインストールします。 リーリー mongoose をインストールしたら、app.js

にインポートします。

リーリー MongoDB データベースの URL を app.js

で定義します。

リーリー Mongoose を使用して MongoDB データベースに接続しましょう。その外観は次のとおりです:

リーリー

接続が確立されると、メッセージは ユーザー名 および

パスワード

とともに記録されます。 app.js ファイルは次のようになります:

リーリー

次のコマンドを使用してノード サーバーを再起動します: リーリー Angular アプリケーションからノード サーバーに接続するには、プロキシを設定する必要があります。

client/src

フォルダーに

proxy.json

という名前のファイルを作成します。その外観は次のとおりです: リーリー clientpackage.json ファイルを変更して、プロキシ ファイルを使用してアプリケーションを起動します。

リーリー

変更を保存し、クライアント サーバーを起動します。 リーリー ブラウザで http://localhost:4200 にアクセスし、ユーザー名とパスワードを入力します。ログイン ボタンをクリックすると、パラメータをノード コンソールにログインする必要があります。

ユーザーログインの確認

Mongoose を使用して MongoDB と対話するには、スキーマを定義し、モデルを作成する必要があります。

server

フォルダー内に、

model

という名前のフォルダーを作成します。 model フォルダーに

user.js

という名前のファイルを作成します。次のコードを user.js ファイルに追加します: リーリー 上記のコードに示すように、mongoose を user.js にインポートします。 mongoose

schema

を使用して userSchema を作成し、mongoose モデルを使用して User モデルを作成しました。 <p>将 <code class="inline">user.js 文件导入到 app.js 文件中。

const User = require('./model/user');

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

db.createCollection('user')

插入您要查询的记录。

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

现在,一旦 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'
				})
			}
			
		})
	});
})

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

保存以上更改并尝试运行客户端和服务器。输入用户名 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>

创建一个名为 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;
  }
}

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

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

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

如上面的代码所示,您刚刚使用 @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 { }

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);

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

import { Router } from '@angular/router';

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

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

以下是 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');
  	}
  }

}

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

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

总结

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

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

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

以上がAngular と MongoDB を使用してブログ アプリケーションのホームページを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:評価次の記事:評価