gpt4 book ai didi

javascript - 函数调用 Node.js 库中其他函数的问题

转载 作者:行者123 更新时间:2023-11-30 20:31:39 26 4
gpt4 key购买 nike

我是 Node 新手。

我将函数中的一堆前端从我的库移到了一个新的 Node.js 库中。

我知道你必须把它放在 module.exports = {

并且所有的函数都必须是这种格式: tempToFahrenheit:函数(tempInC){

我可以很好地调用其他脚本中的函数,但函数相互调用时遇到问题:

tempToFahrenheit: function(tempInC){
tempInF = (tempInC*1.8)+32;
return tempInF;
},

getTextWeatherUsingStationUsingRequest: function(theStation){

const http = require("http");
const https = require("https");

// theURL = 'https://api.weather.gov/stations/' + theStation + '/observations/current';
thePath = '/stations/' + theStation + '/observations/current';


function requestTheData(){

var returnedJSON;

var options = {
protocol: "https:",
hostname: "api.weather.gov",
path: thePath,
method: "GET",
headers: {
'Accept' : 'application/json',
'Content-Type': 'application/json',
'User-Agent' : 'MY-TEST-UA'
}

};
var req= https.request(options);

var theData = '';

req.on("response", function(res){
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);

res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
theData += chunk;
});

res.on('end', () => {
console.log('No more data in response.');

returnedJSON = JSON.parse(theData);
console.log(returnedJSON.id);

// Why can't ot find temptoFahrenheit
theTemp = Math.round( tempToFahrenheit(returnedJSON.properties.temperature.value) )

windSpeed = Math.round(returnedJSON.properties.windSpeed.value);
pressure = returnedJSON.properties.barometricPressure.value;

在此文本的正上方,您会看到一行试图在函数 getTextWeatherUsingStationUsingRequest() 中调用 tempToFahrenheit()。我该如何做到这一点?您必须为 Node.js 设置函数的奇怪方式(散列对吗?)这些函数似乎无法相互访问。

另一个更笼统的问题。 Node.js 的好处应该是你在前端和后端使用 Javascript,并且你可以重用代码,就像在库中一样。但是正如我们在这里看到的那样,我必须对代码进行相当大的(并且容易出错)更改才能使其与 Node.js 一起工作。另外,我必须保留库的两份副本,一份是前端,另一份是 Node.js。难道没有更好的方法在 Node 中创建库吗?

最佳答案

在 Node 库中,所有函数都是公共(public)对象 (modules.exports) 的成员。因此,当你想从另一个函数调用一个函数时,你必须指定你正在调用 this.someFunction,而不仅仅是 someFunction(后者将寻找一个全局 -可访问的 someFunction,它不存在)。

让事情更复杂一点,但是,如果你在你的情况下尝试这样做,this 将引用不正确的上下文,因为该调用嵌套在几个异步回调中( req.onres.on)。因此,您会遇到同样的问题。

要解决此问题,请尝试在 getTextWeatherUsingStationUsingRequest 函数的开头添加 var self=this;,然后更改 tempToFahrenheit 函数调用 self.tempToFahrenheit

(变量 self 将通过名为 closure 的功能在回调中正确传播。this 不会这样做,因为它是一个保留关键字,它始终指代当前上下文。)

关于javascript - 函数调用 Node.js 库中其他函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com