108 lines
3.4 KiB
JavaScript
108 lines
3.4 KiB
JavaScript
var fs = require("fs");
|
|
var routerServer = null;
|
|
var nextServerUtil = null;
|
|
var nextError = null;
|
|
var dev = process.env.NODE_ENV == "development";
|
|
var handle = function () {
|
|
throw nextError;
|
|
}
|
|
var isPrepared = false;
|
|
var configJSON = {};
|
|
|
|
try {
|
|
configJSON = JSON.parse(fs.readFileSync(__dirname + "/../../config.json"));
|
|
} catch (err) {
|
|
// Ignore the error
|
|
}
|
|
|
|
var useHTTPS = configJSON.secure === undefined ? false : configJSON.secure;
|
|
var port = useHTTPS ? (configJSON.sport === undefined ? 443 : configJSON.sport) : (configJSON.port === undefined ? 80 : configJSON.port);
|
|
|
|
try {
|
|
// process.cwd() is the webroot, the webroot will then act as a Next.js app directory
|
|
try {
|
|
// Use Next.js from Next.js app directory
|
|
routerServer = require(process.cwd() + "/node_modules/next/dist/server/lib/router-server.js");
|
|
nextServerUtil = require(process.cwd() + "/node_modules/next/dist/server/lib/utils.js");
|
|
} catch (err) {
|
|
// Fallback Next.js module.
|
|
try {
|
|
require(process.cwd() + "/node_modules/next");
|
|
throw new Error("Next.js version mismatch");
|
|
} catch (err) {
|
|
// No Next.js in Next.js app directory
|
|
}
|
|
routerServer = require("next/dist/server/lib/router-server.js");
|
|
nextServerUtil = require("next/dist/server/lib/utils.js");
|
|
}
|
|
async function init() {
|
|
try {
|
|
var checkNodeDebugType = function() {return null};
|
|
if (nextServerUtil.getNodeDebugType) checkNodeDebugType = nextServerUtil.getNodeDebugType;
|
|
if (nextServerUtil.checkNodeDebugType) checkNodeDebugType = nextServerUtil.checkNodeDebugType;
|
|
initResponse = await routerServer.initialize({
|
|
dir: process.cwd(),
|
|
port: port,
|
|
dev: dev,
|
|
isNodeDebugging: Boolean(checkNodeDebugType()) || false,
|
|
startServerSpan: undefined,
|
|
experimentalHttpsServer: useHTTPS
|
|
});
|
|
handle = initResponse[0];
|
|
isPrepared = true;
|
|
} catch (err) {
|
|
nextError = err;
|
|
}
|
|
}
|
|
init();
|
|
} catch (err) {
|
|
// process.cwd() is the webroot, the webroot will then act as a Next.js app directory
|
|
try {
|
|
var next = null;
|
|
try {
|
|
// Use Next.js from Next.js app directory
|
|
next = require(process.cwd() + "/node_modules/next");
|
|
} catch (err) {
|
|
// Fallback Next.js module.
|
|
next = require("next");
|
|
}
|
|
|
|
var app = next({
|
|
dir: process.cwd(),
|
|
port: port,
|
|
dev: dev,
|
|
customServer: false
|
|
});
|
|
|
|
handle = app.getRequestHandler();
|
|
|
|
app.prepare().then(function () {
|
|
isPrepared = true;
|
|
}).catch(function (err) {
|
|
nextError = err;
|
|
});
|
|
} catch (err) {
|
|
nextError = err;
|
|
}
|
|
}
|
|
|
|
// The returned function has to be an async function, or else the errors will crash SVR.JS
|
|
function Mod() {}
|
|
Mod.prototype.callback = function callback(req, res, serverconsole, responseEnd, href, ext, uobject, search, defaultpage, users, page404, head, foot, fd, elseCallback, configJSON, callServerError, getCustomHeaders, origHref, redirect, parsePostData) {
|
|
return async function () {
|
|
try {
|
|
if (nextError) throw nextError;
|
|
if (!isPrepared) {
|
|
callServerError(503, "nextjs-integration/1.1.0");
|
|
serverconsole.errmessage("Next.js application not yet fully loaded.");
|
|
return;
|
|
}
|
|
await handle(req, res);
|
|
serverconsole.resmessage("Next.js request successfully processed.");
|
|
} catch (err) {
|
|
callServerError(500, "nextjs-integration/1.1.0", err);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = Mod;
|