在本教程系列的第一部分中,您了解了如何开始创建 Angular Web 应用程序。您学习了如何设置应用程序并创建登录组件。
在本系列的这一部分中,您将进一步写下与 MongoDB 银行端交互所需的 REST API。您还将创建 Home
组件,该组件将在用户成功登录后显示。
开始使用
让我们开始克隆本教程系列第一部分的源代码。
git clone https://github.com/royagasthyan/AngularBlogApp-Login AngularBlogApp-Home
导航到项目目录并安装所需的依赖项。
cd AngularBlogApp-Home/client npm install
安装依赖项后,重新启动应用程序服务器。
npm start
将浏览器指向 http://localhost:4200,应用程序应该正在运行。
创建登录 REST API
在项目文件夹 AngularBlogApp-Home
中,创建另一个名为 server
的文件夹。您将使用 Node.js 编写 REST API。
导航到 server
文件夹并初始化项目。
cd server npm init
输入所需的详细信息,您应该已初始化项目。
您将使用 Express
框架来创建服务器。使用以下命令安装 Express
:
npm install express --save
安装 Express
后,创建一个名为 app.js
的文件。这将是 Node.js 服务器的根文件。
以下是 app.js
文件的外观:
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!'))
如上面的代码所示,您将 express
导入到 express
导入到 app.js
中。使用 express
,您创建了一个应用程序 app
中。使用 express
,您创建了一个应用程序 app
。
使用 app
,您公开了一个端点 /api/user/login
,它将显示一条消息。使用以下命令启动 Node.js 服务器:
node app.js
将浏览器指向 http://localhost:3000/api/user/login,您应该会显示该消息。
您将使用 用户名
和 密码
参数从 Angular 服务向服务器发出 POST
请求。所以需要解析请求参数。
安装 body-parser
,这是 Node.js 正文解析中间件,用于解析请求参数。
npm install body-parser --save
安装完成后,将其导入 app.js
。
const bodyParser = require('body-parser')
将以下代码添加到 app.js
文件中。
app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended : false}))
上述两个 body-parser
选项返回仅解析 json
和 urlencoded
主体的中间件,并且仅查看 Content-Type
标头匹配的请求type
选项返回仅解析 json
和 urlencoded
主体的中间件,并且仅查看 Content-Type
标头匹配的请求type
选项。
您将使用 Mongoose
与 Node.js 中的 MongoDB
进行交互。因此,使用节点包管理器(npm)安装 Mongoose
。
npm install mongoose --save
安装 mongoose 后,将其导入 app.js
。
const mongoose = require('mongoose');
在 app.js
中定义 MongoDB 数据库 URL。
const url = 'mongodb://localhost/blogDb';
让我们使用 Mongoose
连接到 MongoDB 数据库。其外观如下:
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.js
文件的外观:
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!'))
使用以下命令重新启动节点服务器:
node app.js
要从 Angular 应用程序连接到 Node 服务器,您需要设置代理。在 client/src
文件夹中创建一个名为 proxy.json
的文件。其外观如下:
{ "/api/*": { "target": "http://localhost:3000", "secure": "false" } }
修改客户端package.json
文件以使用代理文件启动应用程序。
"start": "ng serve --proxy-config proxy.json"
保存更改并启动客户端服务器。
npm start
将浏览器指向 http://localhost:4200 并输入用户名和密码。单击登录按钮,您应该将参数记录到节点控制台中。
验证用户登录
要使用 Mongoose 与 MongoDB 交互,您需要定义架构并创建模型。在 server
文件夹内,创建一个名为 model
文件夹内,创建一个名为 model
的文件夹。
在 model
文件夹内创建一个名为 user.js
的文件。将以下代码添加到 user.js
文件:
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;
如上面的代码所示,您将 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 id="Angular-Blog-App">Angular Blog App</h3> </header> <main role="main"> <div class="jumbotron"> <h1 id="Lorem-ipsum">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 id="Subheading">Subheading</h4> <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> <h4 id="Subheading">Subheading</h4> <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> <h4 id="Subheading">Subheading</h4> <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> </div> <div class="col-lg-6"> <h4 id="Subheading">Subheading</h4> <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> <h4 id="Subheading">Subheading</h4> <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> <h4 id="Subheading">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中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

本文讨论了使用浏览器开发人员工具的有效JavaScript调试,专注于设置断点,使用控制台和分析性能。

将矩阵电影特效带入你的网页!这是一个基于著名电影《黑客帝国》的酷炫jQuery插件。该插件模拟了电影中经典的绿色字符特效,只需选择一张图片,插件就会将其转换为充满数字字符的矩阵风格画面。快来试试吧,非常有趣! 工作原理 插件将图片加载到画布上,读取像素和颜色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地读取图片的矩形区域,并利用jQuery计算每个区域的平均颜色。然后,使用

本文将引导您使用jQuery库创建一个简单的图片轮播。我们将使用bxSlider库,它基于jQuery构建,并提供许多配置选项来设置轮播。 如今,图片轮播已成为网站必备功能——一图胜千言! 决定使用图片轮播后,下一个问题是如何创建它。首先,您需要收集高质量、高分辨率的图片。 接下来,您需要使用HTML和一些JavaScript代码来创建图片轮播。网络上有很多库可以帮助您以不同的方式创建轮播。我们将使用开源的bxSlider库。 bxSlider库支持响应式设计,因此使用此库构建的轮播可以适应任何

数据集对于构建API模型和各种业务流程至关重要。这就是为什么导入和导出CSV是经常需要的功能。在本教程中,您将学习如何在Angular中下载和导入CSV文件


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Atom编辑器mac版下载
最流行的的开源编辑器

记事本++7.3.1
好用且免费的代码编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),