【问题标题】:What causes error 400 in axios post request?是什么导致 axios 发布请求中的错误 400?
【发布时间】:2020-05-08 01:48:44
【问题描述】:

我正在 oclif 中编写一个 cli,它使用来自用 node.js 编写的 rest api 的数据。我正在尝试执行发送用户名和密码的发布请求,从 api 接收令牌并进行验证。

我的代码在文件(Login.ts)中如下:

import Command from '@oclif/command'
import axios from 'axios'
import {flags} from  '@oclif/command'
const bcrypt = require('bcrypt');
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
export class LoginCommand extends Command {
  static flags = { 
    user: flags.string({dependsOn:['passw']}),
    //email: flags.string({dependsOn:['passw'],exlucsive:['user']}),
    passw: flags.string()
  }

  async run() {
        const {flags} = this.parse(LoginCommand); 
        var hash = bcrypt.hashSync(`${flags.passw}`,10);
        var fs=require('fs');
        var privateKey = fs.readFileSync('private.key');
        const token=await axios.post('https://localhost:8765/energy/api/Login?username=' +`${flags.user}` +'&passw=' + hash);
        jwt.verify(JSON.stringify(token),privateKey,function(err,decoded){
            fs.writeFileSync('softeng19bAPI.token',JSON.stringify(token));
        });

我在文件中的代码(entry.routes.js):

app.post("/energy/api/Login", function(req,res){ 
        var jwt=require('jsonwebtoken');
        var password,e,a,q,p;
        sql.query(`SELECT user,pass,quota,apikey,email FROM users WHERE user=?`,[req.query.username],(err,res1) => {
            console.log(res1);
            password=res1[0].pass;
            e=res1[0].email;
            a=res1[0].apikey;
            q=res1[0].quota;
            p=res1[0].privileges;
        });
        if(req.query.passw = password){
                var jwt=require('jsonwebtoken');
                var privateKey = fs.readFileSync('/home/vangelis/softeng/energy/private.key');
                var token = jwt.sign({user:req.query.user ,passw: req.query.passw,email: e, quota: q,apikey: a,privileges: p }, privateKey, { algorithm: 'RS256' });
                res.status(200).send(token);
            }
        else res.status(400).send("Bad Request");
  });
  }

我认为这个错误通常是由 axios post 请求产生的,但我找不到错误发生了。

【问题讨论】:

  • 您的第二个代码 sn-p 显示它在 else 分支中发送 400...顺便说一句,在 JavaScript 中 == 比较两个项目 = 将左侧分配到右侧。再次阅读该代码时需要考虑的事情...

标签: javascript node.js express jwt axios


【解决方案1】:

问题

sql.querycallback类型的执行,意思是代码块与

if(req.query.passw = password)

将在之前执行

password=res1[0].pass;

比如它(大概)是异步的。

400的问题(在帖子的cmets中提到)是赋值的使用(=)而不是比较(===),所以if里面的代码是一模一样

if(req.query.passw = undefined)

这是 falsy,所以决定将转移到else 分支

此代码的简单解决方案

sql.query的回调中移动 if-else

附: falsy - 给变量赋值会返回这个值,在你的情况下它是undefined;要检查这一点,只需打开 Chrome 的控制台并执行 2 个不同的案例:

var a = 1 // 1
var b = undefined // undefined

【讨论】:

  • 谢谢!!菜鸟失误哈哈
  • 乐于助人:)
猜你喜欢
  • 2021-03-31
  • 2020-11-19
  • 1970-01-01
  • 2018-11-06
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多