我有一个角度应用和一个nodejs后端服务器。我想从后端获取数据,但是当我尝试使用Angular HTTPClient连接到它时,它说:POSThttp://localhost:3000/login/aa/aa404(未找到)。但是,当我手动将链接放到浏览器中时,它工作得很好。这是一些代码:
addUser(user: IUser): Observable<IUser> {
return this.httpClient.post<IUser>(`http://localhost:3000/login/${user.email}/${user.passwort}`, user, {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
})
.pipe(catchError(this.handleError));
}
var mysql = require('mysql');
var express = require('express');
var app = express();
const port = process.env.PORT || 3000;
[...]
app.get('/login/:email/:pw',function(req,res) {
res.setHeader('Content-Type', 'application/json');
var passwort = new Passwort(''+req.params.pw);
passwort.comparePasswort();
con.query("SELECT u.Email, u.Hash FROM User u WHERE u.Email LIKE "+ "'" + req.params.email+ "'", function(err, result ){
if(err) throw err;
console.log(result)
res.send("test")
})
});
感谢您的每一个回答和您的时间!
get
请求,而不是post
请求。您应该使用get
将您的请求转换为服务中的this.httpClient.get...
,或者使用post
将其转换为后端的app.post
请求。
它在您的浏览器中起作用的原因是,使用地址栏访问某些内容时,浏览器会执行GET
请求。
addUser(user: IUser): Observable<IUser> {
return this.httpClient.get<IUser>(`http://localhost:3000/login/${user.email}/${user.passwort}`, {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
})
.pipe(catchError(this.handleError));
}
/:email
之前,您需要预订此particular元素
const mongoose = require("mongoose");
const User = mongoose.model("User");
const userParams = (req, res, next, email) => {
User.findOne({email:email})
.then((user)=> {
if (!user) {
return res.sendStatus(404);
}
req.user = user;
return next();
})
.catch(next);
};
module.exports = userParams;
然后通过键入]在快速路由器中使用它>
router.param("email", userParams);
通过这种方式,您的路由器将了解您要发送的参数