Node.js 在angular 5中,如何在post响应后从restAPI获取发送数据?
我对从服务器发送的json对象的输出有问题,由于某种原因,我无法获取并显示服务器响应中包含的消息。我做错了什么?谢谢你的帮助。 下面是我的申请代码 服务:Node.js 在angular 5中,如何在post响应后从restAPI获取发送数据?,node.js,angular,rxjs,observable,angular-http,Node.js,Angular,Rxjs,Observable,Angular Http,我对从服务器发送的json对象的输出有问题,由于某种原因,我无法获取并显示服务器响应中包含的消息。我做错了什么?谢谢你的帮助。 下面是我的申请代码 服务: import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http'; import { User } from './user'; import { Observable
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http';
import { User } from './user';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { ResponseObject } from './response-object';
@Injectable()
export class MntApiService {
private mntAPI = 'http://localhost:3000';
constructor(private _http: HttpClient) {
}
getUsers(): Observable<any> {
return this._http.get<any>(this.mntAPI + '/users');
}
addUser(email: string, password: string): Observable<any> {
return this._http.post<any>(this.mntAPI + '/signup', { email, password }, )
.map((response: Response) => response);
}
}
component.html
<div class="container pt-5">
<form [formGroup]="myForm">
<div class="form-group">
<label for="email">Email address</label>
<small class="form-text text-danger">
{{response?.body.message}}
</small>
<input formControlName="email" type="email" class="form-control" id="email" placeholder="Enter email" autocomplete="email">
<small *ngIf="isControlInvalid('email')" class="form-text text-danger">неправельный формат почты</small>
</div>
<div class="form-group">
<label for="password">Password</label>
<input formControlName="password" type="password" class="form-control" id="password" placeholder="Password"
autocomplete="current-password">
<small *ngIf="isControlInvalid('password')" class="form-text text-danger">это поле не может быть пустым</small>
</div>
<button (click)="addUser()" class="btn btn-primary">Submit
</button>
</form>
</div>
电子邮件地址
{{response?.body.message}
неправельный формат почты
密码
это поле не может быть пустым
提交
和我的节点服务器代码:
app.post('/signup', (req, res) => {
let sql = 'SELECT email FROM users WHERE email = ?';
let emailBody = [req.body.email];
config.query(sql, emailBody, (err, userEmail) => {
const errResponse = {
sacces: false,
message: 'Почта занята'
};
const rightResponse = {
'sacces': true,
'message': 'Пользователь создан',
'status': 201
};
if (userEmail.length < 0) {
res.status(409).send(errResponse);
console.log('mail exist!!!!');
return;
} else {
bcrypt.hash(req.body.password, 10, (err, hash) => {
if (err) {
return res.status(500).json({
error: err
});
} else {
let sql = 'INSERT INTO users ( email, password) VALUES ( ?, ?)';
let email = req.body.email;
let password = hash;
let body = [email, password];
config.query(sql, body, (err) => {
if (err) {
res.json({
"message": 'SQL Error'
});
} else {
//res.sendStatus(201);
res.status(201).send(rightResponse);
// res.status(201).json({
// 'message': "Спасибо за регестрацию"
// });
console.log('User created');
return;
}
});
}
});
}
});
});
app.post('/signup',(req,res)=>{
让sql='从电子邮件=?'的用户中选择电子邮件';
让emailBody=[req.body.email];
config.query(sql,emailBody,(err,userEmail)=>{
常量错误响应={
萨克斯:错,
信息:'
};
常数rightResponse={
“sacces”:没错,
“消息”:“Пззззззззз”,
“状态”:201
};
如果(userEmail.length<0){
res.status(409).send(errResponse);
log('mail exist!!!!');
返回;
}否则{
bcrypt.hash(req.body.password,10,(err,hash)=>{
如果(错误){
返回res.status(500).json({
错误:错误
});
}否则{
让sql='插入用户(电子邮件、密码)值(?,)';
让email=req.body.email;
让password=hash;
让body=[电子邮件,密码];
config.query(sql,body,(err)=>{
如果(错误){
res.json({
“消息”:“SQL错误”
});
}否则{
//res.sendStatus(201);
res.status(201).发送(rightResponse);
//res.status(201.json)({
//“信息”:“СПаззаааааааааааа1072
// });
console.log('User created');
返回;
}
});
}
});
}
});
});
请帮助可能的人,我是一个新手开发人员。这是您代码的一部分
this.mntApiService.addUser(val.email, val.password)
.subscribe(user => {
this.users.push(user);
},
response => { this.response = response; });
您在这里所做的是传递subscribe
method2参数。
第一个参数是这个函数
user => {
this.users.push(user);
}
response => { this.response = response; }
第二个参数是这个函数
user => {
this.users.push(user);
}
response => { this.response = response; }
当发生错误时,作为第二个参数传递给subscribe
的函数将被执行,我想这不是您想要的
也许像这样的一个实现应该可以为您提供帮助
this.mntApiService.addUser(val.email, val.password)
.subscribe(response => {
response => { this.response = response; });
// this.users.push(user); CHECK THIS LINE - YOU ARE NOT RECEIVING A USER FROM THE SERVER BUT A MESSAGE
};
尝试在浏览器中使用网络检查器。您的代码正在发出请求吗?是的,在网络选项卡中,在响应选项卡中,我看到{“sacces”:true,“message”:“User created”,“status”:201}。您的控制台中将显示什么?仅输出未定义如果在
中添加console.log()
。subscribe(User)
block在组件中?非常感谢您的评论和回答,他完全解决了我的问题。再次感谢!