javascript - angular2 http post 请求获取 res.json()

标签 javascript json node.js angular angular2-services

我目前正在制作简单的用户身份验证应用程序。

现在我已经完成了使用 Node js 和 Passport 的后端流程。

我所做的是返回 json 响应,无论身份验证是否顺利。

router.post('/register', (req, res) => {

if(!utils.emailChecker(req.body.username)) {
    return res.status(403).json({
        error: "Invalid Username",
        code: 403
    });
}

if(!utils.passwordChecker(req.body.password)) {
    return res.status(403).json({
        error: "Invalid Password",
        code: 403
    });
}

//mysql query : variables must be inside "" or '';
let sql = `SELECT * FROM users WHERE username="${req.body.username}"`;

connection.query(sql, (err, result) => {
    if(err) throw err;
    if(utils.duplicateChecker(result)) {
        return res.status(409).json({
            error: "Username Exist",
            code: 409
        });
    } else {
        hasher({password: req.body.password}, (err, pass, salt, hash) => {
            let user = {
                authId: 'local: '+req.body.username,
                username: req.body.username,
                password: hash,
                salt: salt,
                displayName: req.body.displayName
            };
    let sql = 'INSERT INTO users SET ?';
     connection.query(sql, user, (err, rows) => {
        if(err) {
            throw new Error("register error!");
        } else {
            req.login(user, (err) => {
                req.session.save(() => {
                                        return res.json({ success: true });
                });
            });
        }
    });
    });  
    }
}); 
});

如上所示,每次请求出错或完美时,都会返回包含错误和代码或成功属性的 json。

我想要做的是通过 angular2 的 http 服务获取这些 json。

@Injectable()
export class UserAuthenticationService {

  private loginUrl = "http://localhost:4200/auth/login";
  private registerSuccessUrl = "http://localhost:4200/auth/register";

  headers = new Headers({
    'Content-Type': 'application/json'
  });

  constructor(private http: Http) { }

  /*
    body: {
     username,
     password,
    }
  */
  logIn(user: Object) {
    return this.http
    .post(this.registerSuccessUrl, JSON.stringify(user),
    { headers: this.headers });
  }

我试过的是这样的。使用后端 url 发出 http post 请求。 并在AuthComponent上实现功能。

export class AuthComponent {

  username: string = '';

  password: string = '';

  remembered: boolean = false;

  submitted = false;

  constructor(private userAuthenticationService: UserAuthenticationService) {}

  onsubmit() { 
    this.userAuthenticationService.logIn({ username: this.username, password:              this.password });
    this.submitted = true; 
  }
 }

但结果是我只是在屏幕上得到 json 对象。 { 成功:真 }!

如何通过 http 调用获取此 json 对象并使用“成功”属性?

最佳答案

没有使用服务器的响应。

  onsubmit() { 
     this.userAuthenticationService
        .logIn({ username: this.username, password: this.password })
        .subscribe(result => {
           //here check result.success
        }, error => console.error(error));
     this.submitted = true; 
      }

关于javascript - angular2 http post 请求获取 res.json(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43866895/

相关文章:

javascript - 在 JavaScript 中创建 XML

javascript - 从 2 个特定元素创建网格

jquery - 无法使用 jQuery 正确打印 HTML 表中的 JSON 响应

ruby-on-rails - ruby rails : Problem adding Transient Attribute to Object for JSON Serializaton

javascript - 我们可以从命令行从 flash 导出到 createjs 吗?

node.js - Json 网络 token 不会过期

javascript - 序列化原始 findAll 返回不需要的 ID 列

javascript - 如何获取当前登录用户authservice的用户名

javascript - 复选框自动检查

javascript - 您可以按字母顺序排列从 JSON 文件动态创建的 jQuery 列表吗?