[英]Nodejs returns undefined when importing function from file
我對 nodejs 有點陌生,並試圖讓它在這里工作,但無論我嘗試什么,它要么返回 undefined 要么返回 [function: online]。 如您所見,我在 online.js 中創建了一個 function 並導出了 function。然后在 app.js 中我需要該文件,然后控制台記錄 const
// app.js
var express = require('express');
var app = express();
app.set('view engine', 'ejs');
var PORT = 3000;
const online = require('./online');
app.use('/public', express.static('./public/'));
app.get('/', function(req, res) {
res.status(200);
res.render('index');
});
app.listen(PORT, function(err) {
if (err) console.log(err);
console.log("Server listening on PORT", PORT);
console.log(online);
});
// online.js
function online() {
var steamServerStatus = require('steam-server-status');
steamServerStatus.getServerStatus(
'oslo14.spillvert.no', 28215, function onlinePlayers(serverInfo) {
if (serverInfo.error) {
console.log(serverInfo.error);
} else {
console.log("game: " + serverInfo.gameName);
console.log("server name: " + serverInfo.serverName);
console.log("players: " + serverInfo.numberOfPlayers + "/" + serverInfo.maxNumberOfPlayers);
}
})
};
module.exports = online();
運行app.js
時,我得到這個 output:
Server listening on PORT 3000
undefined
直到調用回調 function 才知道getServerStatus
是成功還是失敗。 因此,您應該從online
function 返回 Promise,並在onlinePlayers
回調中解析該 promise。 您可以從任何異步 function 等待它(即:讓您的app.listen
回調異步)。 拒絕路徑將導致等待online()
調用的異常。
app.listen(PORT, async function(err){
if (err) console.log(err);
console.log("Server listening on PORT", PORT);
console.log(await online());
}
function online() {
return new Promise((resolve, reject) => {
var steamServerStatus = require('steam-server-status');
steamServerStatus.getServerStatus(
'oslo14.spillvert.no', 28215, function onlinePlayers(serverInfo) {
if (serverInfo.error) {
reject(serverInfo.error);
} else {
console.log("game: " + serverInfo.gameName);
console.log("server name: " + serverInfo.serverName);
console.log("players: " + serverInfo.numberOfPlayers + "/" +
serverInfo.maxNumberOfPlayers);
resolve(serverInfo); // or 'true' or whatever you wanted to log
}
});
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.