簡體   English   中英

在函數外調用變量

[英]calling variable outside the function

我正在嘗試開發一個網頁,使用 axios.get 從另一個 Web 應用程序獲取數據,我想將此數據插入 Postgres 數據庫,問題是數據在 then 承諾中,我無法訪問它以插入它到數據庫,我該怎么做,或者如何訪問外部的數據然后我想插入 var rn0 ty0 這是 main.js

const axios = require('axios')
const InsertToDataBase = require("./InsertToDataBase");
const username = 'admin'
const password = 'admin'
const token = Buffer.from(`${username}:${password}`, 'utf8').toString('base64')
const urlLAMP_0 = 'http://127.0.0.1:8282/~/mn-cse/mn-name/LAMP_0/DATA/la'
const urlLAMP_1 = 'http://localhost:8282/~/mn-cse/mn-name/LAMP_1/DATA/la'
function getDataLAMP_0(){
  axios.get(urlLAMP_0, {
    headers: {
      'Access-Control-Allow-Credentials': 'true',
      'Access-Control-Allow-Origin':'*',
      "X-M2M-RI":"OM2M-webpage",
      'Authorization': `Basic ${token}`,
      'Accept': 'application/json',
      'mode': 'cors',
      'credentials': 'include',
      }
  })
  .then(function(response) {
        document.getElementById("rn0").textContent = response.data['m2m:cin'].rn;
        var rn0 = response.data['m2m:cin'].rn;
        document.getElementById("ty0").textContent = response.data['m2m:cin'].ty;
        var ty0 = response.data['m2m:cin'].ty;
        document.getElementById("ri0").textContent = response.data['m2m:cin'].ri;
        document.getElementById("pi0").textContent = response.data['m2m:cin'].pi;
        document.getElementById("ct0").textContent = response.data['m2m:cin'].ct;
        document.getElementById("lt0").textContent = response.data['m2m:cin'].lt;
        document.getElementById("st0").textContent = response.data['m2m:cin'].st;
        document.getElementById("cnf0").textContent = response.data['m2m:cin'].cnf;
        document.getElementById("cs0").textContent = response.data['m2m:cin'].cs;
        document.getElementById("con0").textContent = response.data['m2m:cin'].con;
  })
}
getDataLAMP_0();
InsertToDataBase.insertdatatolamp0(rn0,ty0);

這是 InsertToDataBase.js

const {Client} = require('pg')
const client = new Client({
    user:"postgres",
    password:"admin",
    host:"localhost",
    port:"5432",
    database:"postgres",
})
function insertdatatolamp0(rn0,ty0){
client.connect()
.then(()=>console.log("connected successfuly"))
.then(()=>client.query("insert into lamp0 values ($1,$2)",[rn0,ty0]))
.catch(e=> console.log(e))
.finally(()=> client.end())
}
module.exports = { insertdatatolamp0 };

你可以鏈接承諾。 這將為您提供足夠的靈活性來一個接一個地執行一系列操作,在您的情況下更改textContent ,然后將一些值插入到數據庫中。

const axios = require("axios");
const InsertToDataBase = require("./InsertToDataBase");
const username = "admin";
const password = "admin";
const token = Buffer.from(`${username}:${password}`, "utf8").toString("base64");
const urlLAMP_0 = "http://127.0.0.1:8282/~/mn-cse/mn-name/LAMP_0/DATA/la";
const urlLAMP_1 = "http://localhost:8282/~/mn-cse/mn-name/LAMP_1/DATA/la";
function getDataLAMP_0() {
  axios
    .get(urlLAMP_0, {
      headers: {
        "Access-Control-Allow-Credentials": "true",
        "Access-Control-Allow-Origin": "*",
        "X-M2M-RI": "OM2M-webpage",
        Authorization: `Basic ${token}`,
        Accept: "application/json",
        mode: "cors",
        credentials: "include",
      },
    })
    .then(function (response) {
      document.getElementById("rn0").textContent = response.data["m2m:cin"].rn;
      document.getElementById("ty0").textContent = response.data["m2m:cin"].ty;
      document.getElementById("ri0").textContent = response.data["m2m:cin"].ri;
      document.getElementById("pi0").textContent = response.data["m2m:cin"].pi;
      document.getElementById("ct0").textContent = response.data["m2m:cin"].ct;
      document.getElementById("lt0").textContent = response.data["m2m:cin"].lt;
      document.getElementById("st0").textContent = response.data["m2m:cin"].st;
      document.getElementById("cnf0").textContent =
        response.data["m2m:cin"].cnf;
      document.getElementById("cs0").textContent = response.data["m2m:cin"].cs;
      document.getElementById("con0").textContent =
        response.data["m2m:cin"].con;

      return response;
    })
    .then((response) => {
      var rn0 = response.data["m2m:cin"].rn;
      var ty0 = response.data["m2m:cin"].ty;
      InsertToDataBase.insertdatatolamp0(rn0,ty0);
    });
}

getDataLAMP_0();

你可以在Promise的幫助下做到這一點,這是一個簡單的例子

async function httpGetDataHandler() {
  const url = "https://jsonplaceholder.typicode.com/posts";
  const response = await fetch(url);
  const parsedJson = await response.json();
  const data = await parsedJson;

  return Promise.resolve(data);
}

const getDataLAMP_0 = () => {
  httpGetDataHandler()
    .then((data) => {
      // do your document.getElementById stuff in here

      // I'm just returning the first index value, you can do whatever you want like return rn0
      return data[0]
    })
    .then((data) => {
      console.log("insert to database: ", data);
    });
};

getDataLAMP_0();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM