使用axios的Node js中未定义的Header



我正试图将头中的令牌从CLI传递给Rest-Api。然而,据说该标头在服务器端是未定义的。CLI文件的代码如下:

import cli from 'cli-ux'
// just prompt for input
import {Command} from '@oclif/command'
import {createConnection} from "typeorm";
import {flags} from  '@oclif/command'
const bcrypt = require('bcrypt');
var fs=require('fs');
const https = require('https')
const axios=require('axios');
const client_cert = fs.readFileSync('ca-crt.pem')
axios.defaults.httpsAgent = new https.Agent({ca : client_cert, keepAlive: true})
export class AdminCommand extends Command {
static flags = { 
newuser: flags.string({dependsOn:['passw'],exclusive:['newdata','userstatus','moduser']}),
moduser: flags.string({dependsOn:['passw'],exclusive:['newuser','newdata','userstatus']}),
passw: flags.string({dependsOn:['email']}),
email: flags.string({dependsOn:['quota']}),
quota: flags.string(),
userstatus: flags.string({exclusive:['newdata','newuser','moduser']}),
newdata: flags.string({dependsOn:['source'],exclusive:['newdata','newuser','moduser']}),
source: flags.string()
}
async run() {
const {flags} = this.parse(AdminCommand); 
var fs=require('fs');
var jwt=require('jsonwebtoken');
var token = fs.readFileSync('softeng19bAPI.token');
axios.defaults.headers.common['X-OBSERVATORY-AUTH']="Bearer " + token;
await cli.anykey();
//create new user
if (`${flags.newuser}` !== "undefined" && `${flags.passw}` !== "undefined" && `${flags.email}` !== "undefined" && `${flags.quota}` !== "undefined" ){
let hash = bcrypt.hashSync(`${flags.passw}`,10);
await axios.post('https://localhost:8765/energy/api/Admin/users?username=' +`${flags.newuser}` +'&passw=' + hash +'&email=' + `${flags.email}`  +'&quota=' + `${flags.quota}`);
}

我正在传递标头中的令牌。但是当我在服务器端打印头时,它是未定义的。服务器端代码如下:

module.exports = app => {
const entry = require("../controlers/entry.controller.js");
const sql = require("../models/db.js");
const bcrypt = require('bcrypt');
const isloggedin=require('../routes/isloggedin.js');
var express=require('express');
// Retrieve a single Entry with Id
var fs=require('fs');
var privateKey = fs.readFileSync('private.key');
app.post("/energy/api/Admin/users",async function(req,res){
const token =  req.headers['X-OBSERVATORY-AUTH'];
console.log(token);
var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split("");
var b = [];  
for (var i=0; i<12; i++) {
var j = (Math.random() * (a.length-1)).toFixed(0);
b[i] = a[j];
}
var rest=b.join("");
var count=0;
const resul = [rest[0]];
for(let x=1; x<rest.length; x++){
count=count+1;
if(count==4)
{
resul.push('-', rest[x]);
count=0;
}
else
{
resul.push(rest[x]);
}
}
const apik=resul.join('');
//console.log(apikey);
//insert into table
//console.log(req.query.passw);
//console.log(hash);
if (req.query.username !== "undefined" && req.query.email !== "undefined" && req.query.quota !== "undefined"){ 
sql.query(`INSERT INTO users VALUES (?,?,?,?,?,?)`,[req.query.username,req.query.passw,req.query.email,req.query.quota,apik,'user'],(err,res2) => {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
});
}
res.send("Succesful "+apik);
}); 

为什么它以未定义的形式通过?当我在CLI上打印它时,令牌不是空的。我在node js中编写,express js

而不是像这样在axios标头中传递承载

axios.defaults.headers.common['X-OBSERVATORY-AUTH']="Bearer " + token;

试着像这个一样发布

await axios.post('https://localhost:8765/energy/api/Admin/users?username=' +`${flags.newuser}` +'&passw=' + hash +'&email=' + `${flags.email}`  +'&quota=' + `${flags.quota}`, {}, {
headers: {"Authorization": `Bearer ` + token}})

从服务器端,从验证请求中检索令牌

const token = req.headers.authorization.split(" ")[1];

最新更新