Я разработал свое приложение с помощью NextJS и React.Теперь я хочу, чтобы это работало на хостинг-провайдере.Тем не менее, у меня есть некоторые проблемы с ним ...
Первый вопрос: Как я могу запустить свое приложение на порт 443?Мой пользовательский файл server.js
выглядит следующим образом:
const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')
const request = require('request')
const requestLanguage = require('express-request-language')
const dev = process.env.NODE_ENV !== 'production'
var app = next({ dev })
const handle = app.getRequestHandler()
app.prepare()
.then(() => {
const server = express()
//parse application
server.use(bodyParser.urlencoded({ extended: false }))
//parse application/json
server.use(bodyParser.json())
server.use(requestLanguage({
languages: ['en-US', 'de-DE']
}))
server.get('/', (req, res) => {
switch (req.language) {
case 'de-DE':
return app.render(req, res, '/', req.query)
default:
return app.render(req, res, '/en', req.query)
}
})
server.post('/', (req, res) => {
addEmailToMailChimp(req.body.email, req.language, (error, response, body) => {
// This is the callback function which is passed to `addEmailToMailChimp`
try {
var respObj = {}; //Initial response object
if (response.statusCode === 200) {
if (req.language == 'de-DE') {
respObj = { success: `Abo mit ${req.body.email} abgeschlossen!`, message: response.body };
} else {
respObj = { success: `Subscribed using ${req.body.email}!`, message: response.body };
}
} else {
if (req.language == 'de-DE') {
respObj = { error: `Ein Fehler ist aufgetreten. Versuche es später erneut.`, message: response.body };
} else {
respObj = { error: `Error trying to subscribe ${req.body.email}. Please try again.`, message: response.body };
}
}
res.send(respObj);
} catch (err) {
if (req.language == 'de-DE') {
var respErrorObj = { error: 'Während der Anfrage ist ein Fehler aufgetreten', message: err.message };
} else {
var respErrorObj = { error: 'There was an error with your request', message: err.message };
}
res.send(respErrorObj);
}
});
})
server.get('*', (req, res) => {
return handle(req, res)
})
server.listen(3000, (err) => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
.catch((ex) => {
console.error(ex.stack)
process.exit(1)
})
function addEmailToMailChimp(email, lang, callback) {
const ENListID = "cac1d74f93"
const DEListID = "362b0f2e7b"
var ListID = ""
if (lang == 'de-DE') {
ListID = DEListID
} else {
ListID = ENListID
}
var options = {
method: 'POST',
url: `https://us19.api.mailchimp.com/3.0/lists/${ListID}/members`,
headers:
{
'Postman-Token': 'ca5b4512-5977-4165-b543-e7df87129578',
'Cache-Control': 'no-cache',
Authorization: 'Basic YW55c3RyaW5nOjQ1MDM5NzA5YWJjOGY2Zjc1YTRmNTljOTJkNjU4NTE0LXVzMTk=',
'Content-Type': 'application/json'
},
body: { email_address: email, status: 'pending' },
json: true
};
request(options, callback);
}
Что именно мне нужно изменить здесь, чтобы использовать порт 443?
Второй вопрос: во время процесса сборки с помощью командыnpm run build
, я сталкиваюсь с некоторыми ошибками, которые не происходят локально, однако:
[11:20:24] Compiling client
[11:20:24] Compiling server
[11:20:26] Compiled server in 2s
[11:20:29] Compiled client in 5s
> Failed to build
{ Error: (client) ./css/index.css
Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
ModuleBuildError: Module build failed (from ./node_modules/webp-loader/index.js):
Error: spawn /home/tmaulmxw/formally-homepage/node_modules/cwebp-bin/vendor/cwebp ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
at onErrorNT (internal/child_process.js:362:16)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
at runLoaders (/home/tmaulmxw/formally-homepage/node_modules/webpack/lib/NormalModule.js:286:20)
at /home/tmaulmxw/formally-homepage/node_modules/loader-runner/lib/LoaderRunner.js:364:11
at /home/tmaulmxw/formally-homepage/node_modules/loader-runner/lib/LoaderRunner.js:230:18
at context.callback (/home/tmaulmxw/formally-homepage/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
at /home/tmaulmxw/formally-homepage/node_modules/webp-loader/index.js:32:9
at <anonymous>
Где именно ошибка?однако, когда я запускаю команду npm run dev
, ошибка не возникает.Мой файл package.json
выглядит следующим образом:
{
"name": "formally_homepage",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "node server.js",
"build": "next build",
"start": "NODE_ENV=production node server.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@zeit/next-css": "^1.0.1",
"axios": "^0.18.0",
"body-parser": "^1.18.3",
"evergreen-ui": "^4.0.0-41",
"express": "^4.16.3",
"express-request-language": "^1.1.15",
"img-loader": "^3.0.0",
"js-cookie": "^2.2.0",
"next": "^7.0.0",
"next-compose-plugins": "^2.1.1",
"next-ga": "^2.3.1",
"next-images": "^1.0.0",
"next-optimized-images": "^1.4.1",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"request": "^2.88.0",
"restify": "^7.2.1",
"ui-box": "^1.4.0"
}
}
На моем хост-сервере установлен сервер Linux, на котором уже установлены узел, NPM и все зависимости из файла package.json
.
Я абсолютный новичок в этой области и поэтому очень зависит от вашей помощи.Пожалуйста, покажите мне конкретные примеры, что мне нужно точно изменить.Я очень рад этому.Спасибо