ホームページ >ウェブフロントエンド >jsチュートリアル >Angular と MongoDB を使用してブログ アプリケーションのホームページを構築する
このチュートリアル シリーズの最初の部分では、Angular Web アプリケーションの作成を開始する方法を学びました。アプリケーションを設定し、ログイン コンポーネントを作成する方法を学習しました。
シリーズのこのパートでは、MongoDB の銀行側と対話するために必要な REST API についてさらに詳しく説明します。また、ユーザーが正常にログインした後に表示される Home
コンポーネントも作成します。
このチュートリアル シリーズの最初の部分のソース コードを複製することから始めましょう。
リーリープロジェクト ディレクトリに移動し、必要な依存関係をインストールします。
リーリー依存関係をインストールした後、アプリケーション サーバーを再起動します。
リーリーブラウザで http://localhost:4200 を指定すると、アプリケーションが実行されるはずです。
プロジェクト フォルダー AngularBlogApp-Home
に、server
という名前の別のフォルダーを作成します。 Node.js を使用して REST API を作成します。
server
フォルダーに移動し、プロジェクトを初期化します。
必要な詳細を入力すると、プロジェクトが初期化されます。
Express
フレームワークを使用してサーバーを作成します。次のコマンドを使用して Express
をインストールします:
Express をインストールした後、
app.js という名前のファイルを作成します。これは Node.js サーバーのルート ファイルになります。
app.js ファイルは次のようになります:
リーリー
express を
app.js にインポートします。
express を使用して、アプリケーション
app を作成します。
app を使用して、メッセージを表示するエンドポイント
/api/user/login を公開します。次のコマンドを使用して Node.js サーバーを起動します:
リーリー
Username および
Password パラメーターを使用して、Angular サービスからサーバーに
POST リクエストを作成します。したがって、リクエストパラメータを解析する必要があります。
body-parser、これは Node.js ボディ解析ミドルウェアで、リクエスト パラメーターを解析するために使用されます。
リーリー
app.js にインポートします。
リーリー
app.js ファイルに追加します。
リーリー
body-parser オプションは、
json および
urlencoded の本体のみを解析し、
Content-Type## のみを調べるミドルウェアを返します。 # リクエストの type
オプションに一致するヘッダー。
Mongoose
MongoDB と対話します。したがって、Node Package Manager (npm) を使用して
Mongoose をインストールします。
リーリー
mongoose をインストールしたら、
app.js
リーリー
MongoDB データベースの URL を
app.js
リーリー
Mongoose
を使用して MongoDB データベースに接続しましょう。その外観は次のとおりです:
接続が確立されると、メッセージは ユーザー名
および
とともに記録されます。
app.js
ファイルは次のようになります:
次のコマンドを使用してノード サーバーを再起動します:
リーリー
Angular アプリケーションからノード サーバーに接続するには、プロキシを設定する必要があります。
フォルダーに
proxy.json という名前のファイルを作成します。その外観は次のとおりです:
リーリー
clientpackage.json
ファイルを変更して、プロキシ ファイルを使用してアプリケーションを起動します。
変更を保存し、クライアント サーバーを起動します。
リーリー
ブラウザで http://localhost:4200 にアクセスし、ユーザー名とパスワードを入力します。ログイン ボタンをクリックすると、パラメータをノード コンソールにログインする必要があります。
ユーザーログインの確認
Mongoose を使用して MongoDB と対話するには、スキーマを定義し、モデルを作成する必要があります。
server という名前のフォルダーを作成します。
model
フォルダーに
という名前のファイルを作成します。次のコードを user.js
ファイルに追加します:
リーリー
上記のコードに示すように、mongoose を user.js
にインポートします。 mongoose
を使用して 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>© 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
并指定了 选择器
, templateUrl
和 styleUrls
。
将 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
。
在本教程中,您了解了如何编写用于用户登录的 REST API 端点。您学习了如何使用 Mongoose
从 Node.js 与 MongoDB 进行交互。成功验证后,您了解了如何使用 Angular Router
导航到 HomeComponent
。
您学习编写 Angular 应用程序及其后端的体验如何?请在下面的评论中告诉我们您的想法和建议。
本教程的源代码可在 GitHub 上获取。
以上がAngular と MongoDB を使用してブログ アプリケーションのホームページを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。