>  기사  >  웹 프론트엔드  >  Angular와 MongoDB를 사용하여 블로그 애플리케이션 홈페이지 구축

Angular와 MongoDB를 사용하여 블로그 애플리케이션 홈페이지 구축

WBOY
WBOY원래의
2023-09-03 23:49:011180검색

이 튜토리얼 시리즈의 첫 번째 부분에서는 Angular 웹 애플리케이션 생성을 시작하는 방법을 배웠습니다. 애플리케이션을 설정하고 로그인 구성요소를 생성하는 방법을 배웠습니다.

시리즈의 이 부분에서는 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 파일의 모습입니다:

으아악

위 코드에서 볼 수 있듯이 expressexpress 导入到 app.js 中。使用 express,您创建了一个应用程序 app로 가져옵니다. express를 사용하여 애플리케이션 을 만듭니다.

app,您公开了一个端点 /api/user/login를 사용하면 메시지가 표시됩니다. 다음 명령을 사용하여 Node.js 서버를 시작합니다.

으아악

브라우저에서 http://localhost:3000/api/user/login을 가리키면 메시지가 표시됩니다.

用户名 密码 参数从 Angular 服务向服务器发出 POST 요청을 사용하게 됩니다. 따라서 요청 매개변수를 구문 분석해야 합니다.

요청 매개변수 구문 분석을 위한 Node.js 본문 구문 분석 미들웨어인 설치 body-parser.

으아악

설치가 완료되면 가져오기를 app.js 하세요.

으아악

다음 코드를 app.js 파일에 추가하세요.

으아악

위의 두 body-parser 选项返回仅解析 jsonurlencoded 主体的中间件,并且仅查看 Content-Type 标头匹配的请求type 옵션은 jsonurlencoded 본문만 구문 분석하고 Content-Type 태그만 보는 미들웨어를 반환합니다. 요청의 type 옵션과 일치하는 헤더입니다.

Mongoose 与 Node.js 中的 MongoDB 进行交互。因此,使用节点包管理器(npm)安装 Mongoose를 사용하게 됩니다.

으아악

몽구스를 설치한 후 가져옵니다 app.js.

으아악

app.js에서 MongoDB 데이터베이스 URL을 정의합니다.

으아악

Mongoose를 사용하여 MongoDB 데이터베이스에 연결해 보겠습니다. 다음과 같습니다:

으아악

연결이 이루어지면 메시지는 用户名 密码 로 기록됩니다.

다음은 app.js 파일의 모습입니다:

으아악

다음 명령을 사용하여 노드 서버를 다시 시작하세요.

으아악

Angular 애플리케이션에서 Node 서버에 연결하려면 프록시를 설정해야 합니다. client/src 文件夹中创建一个名为 proxy.json에 있는 파일. 다음과 같습니다:

으아악

프록시 파일을 사용하여 애플리케이션을 실행하도록 클라이언트 package.json 파일을 수정하세요.

으아악

변경 사항을 저장하고 클라이언트 서버를 시작하세요.

으아악

브라우저에서 http://localhost:4200을 가리키고 사용자 이름과 비밀번호를 입력하세요. 로그인 버튼을 클릭하면 노드 콘솔에 매개변수를 기록해야 합니다.

사용자 로그인 확인

Mongoose를 사용하여 MongoDB와 상호 작용하려면 스키마를 정의하고 모델을 생성해야 합니다. server 文件夹内,创建一个名为 model 폴더 안에 model이라는 폴더를 만듭니다.

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

으아악

위 코드에서 볼 수 있듯이 mongoose를 user.js 中。您使用 mongoose schema 创建了 userSchema,并使用 mongoose 模型创建了 User 모델로 가져옵니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:평가다음 기사:평가