Node.js 角度,Http post返回对象
我有一个函数,它可以在我的数据库中找到一个对象,并应该返回它。我在它前面放了一个conse.log,看看它是否是我想要得到的对象,并正常工作 这是我的服务:Node.js 角度,Http post返回对象,node.js,angular,typescript,http,post,Node.js,Angular,Typescript,Http,Post,我有一个函数,它可以在我的数据库中找到一个对象,并应该返回它。我在它前面放了一个conse.log,看看它是否是我想要得到的对象,并正常工作 这是我的服务: buscarUsuario(email: string){ return this.http.post(`${URL}/user/email`, email) .subscribe(resp => { //Here i can see the object and works
buscarUsuario(email: string){
return this.http.post(`${URL}/user/email`, email)
.subscribe(resp => {
//Here i can see the object and works
console.log(resp['usuario']);
//This return doesn't work
return resp['usuario'];
});
}
这是我的后端的功能,我在Postman中测试了它,它工作正常:
userRoutes.post('/email', async(req: Request, res: Response) => {
const usuario = await Usuario.findOne({email: req.body.email});
res.json({
ok: true,
usuario
});
}))
那么,有人能告诉我如何归还那个物体吗?请:)您不能从
.subscribe()
方法返回值.subscribe()
将Subscription
返回到相应的可观察的。问题是您想要实现什么?问题是您正在返回一个函数。返回对象的更好方法是使用类似于承诺的东西
比如说
function buscarUsuario(email: string){
return new Promise((resolve, reject) => {
this.http.post(`${URL}/user/email`, email)
.subscribe(resp => {
//Here i can see the object and works
console.log(resp['usuario']);
resolve(resp['usuario'])
});
})
async function test() {
let usuario = await buscarUsuario(...)
}
现在,您可以通过调用.then()
或使用async wait
let usuario = await buscarUsuario(...)
第一种方法
...
buscarUsuario(...)
.then(usuario => {
// usuario is your object
})
.catch(err => { throw err })
更干净的方法是使用async
wait
let usuario = await buscarUsuario(...)
请记住,第二种方法是,包含该行的函数必须是async
比如说
function buscarUsuario(email: string){
return new Promise((resolve, reject) => {
this.http.post(`${URL}/user/email`, email)
.subscribe(resp => {
//Here i can see the object and works
console.log(resp['usuario']);
resolve(resp['usuario'])
});
})
async function test() {
let usuario = await buscarUsuario(...)
}
编辑
function buscarUsuario(email: string){
return this.http.post(`${URL}/user/email`, email).toPromise()
}
或
主要区别在于第二个方法将返回值而不是对象
async function test() {
let usuario = await buscarUsuario(...)
}
这样的办法应该行得通。尝试一下并让我知道结果正确的方法是不订阅服务方法,而是返回可观察的:
buscarUsuario(email: string){
return this.http.post(`${URL}/user/email`, email)
.pipe(map(resp => resp['usuario']))
});
然后,您可以从任何其他位置(例如您的组件)订阅该方法:
componentMethod() {
this.myService.buscarUsuario.subscribe(usuario => this.usuario = usuario);
}
那么,我如何返回那个对象呢?这一切都取决于你想对这个对象做什么<代码>可观察
概念基于反应性。因此,您可以创建streambuscarUsario(email:string){返回this.http.post(
${URL}/user/email,email)}stream$=buscarUsario('email@email.com“”
此流您可以在模板中使用async
管道。或者,您可以调用wait This.http.post(
${URL}/user/email,email).toPromise()
和grab value。我现在尝试了第二种方法,异步函数,现在在控制台上返回一个null对象。log说null too你是否像我一样用承诺包装了这个.http.post
呢?我检查了我的答案,忘了在这里添加引号resolve(resp[usuario])
应该是resolve(resp['usuario'])
是的,我以前就知道了,我试过了,但仍然说空。好的,试着返回这个.http.post(${URL}/user/email),email.toPromise())
确保使用“而不是”