#javascript #node.js #express
Вопрос:
Я создаю панель мониторинга для бота Discord, но я продолжаю получать ошибку TypeError: Не удается прочитать свойство «метод» неопределенного. Код моего приложения таков:
const http = require('http');
const path = require('path');
const client = require("./Client");
const express = require('express');
const reqip = require('request-ip');
const passport = require('passport');
const Discord = require('discord.js');
const session = require('express-session');
const getFilesSync = require("..//Utils/fileWalk");
const SQLiteStore = require("connect-sqlite3")(session);
const { Strategy } = require('passport-discord').Strategy;
const port = process.env.port || 80;
class App {
constructor(locals = {}) {
this.express = express();
this.express.set("view engine", "ejs");
this.express.set("port", port);
this.express.set("json spaces", 2);
this.express.locals = locals;
/ * MiddleWare Functions * /;
this.express.use(express.json());
this.express.use(express.urlencoded({
extended: false
}))
this.express.use(reqip.mw());
this.express.use('/assets', express.static(__dirname "/../Assets"));
bindAuth(this.express, client);
this.express.use(passport.initialize());
this.express.use(passport.session());
this.express.use(async (req, res, next) => {
req.bot = client;
next();
});
this.loadRoutes().loadErrorHandler();
}
listen(port) {
return new Promise((resolve) => this.express.listen(port, resolve));
}
loadRoutes() {
const routesPath = path.join(__dirname, "../routes");
const routes = getFilesSync(routesPath);
if (!routes.length) return this;
routes.forEach((filename) => {
const route = require(path.join(routesPath, filename));
const routePath =
filename === "index.js" ? "/" : `/${filename.slice(0, -3)}`;
try {
this.express.use(routePath, route);
} catch (error) {
console.error(`Error occured with the route "${filename}"nn${error}`);
}
});
return this;
}
loadErrorHandler() {
this.express.use((req, res) => {
res.status(404);
if (req.accepts("html")) return res.render("404", {req});
if (req.accepts("json"))
return res.send({
status: 404,
error: "Not found",
});
res.type("txt").send("404 - Not found");
});
return this;
}
}
function bindAuth(app, client) {
app.use(session({store: new SQLiteStore(), secret: "nosecretlol", resave: false, saveUninitialized: false}))
passport.serializeUser(function(user, done) {
done(null, user);
})
passport.deserializeUser(function(obj, done) {
done(null, obj);
})
passport.use(
new Strategy(
{
clientID: process.env.bot_id,
clientSecret: process.env.bot_secret,
callbackURL: process.env.bot_redirect,
scope: ["identify", "guilds"]
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function() {
profile.tokens = { accessToken }
return done(null, profile)
})
})
)
}
module.exports = App;
И в моем индексе я делаю свое приложение таким:
const App = require("myfile");
(async () => {
await new App().listen(process.env.port || 80)
})()
Сообщение об ошибке находится в: node_modulesexpresslibмаршрутизаториндекс.js:139:34)
Я пытался со всеми и не могу решить эту проблему, я спрашивал многих людей, но никто не дал мне ответа, который мог бы решить мой вопрос.
Как я уже сказал, это для панели управления ботом Discord
Комментарии:
1. Можете ли вы определить строку кода приложения в сообщении об ошибке трассировки, которая вызвала express и породила внутреннюю ошибку? Если вы можете, пожалуйста, отредактируйте вопрос, чтобы включить детали, а не добавлять комментарий ниже.