如何在iis上部署React Next.JS?

lf5gs5x2  于 2022-11-12  发布在  React
关注(0)|答案(4)|浏览(333)

我有一个带有Next.JS的React网络应用程序。我想将它上传到我的IIS FTP上。我应该复制.next文件夹吗?如果是,为什么我会在这种情况下得到错误?
错误屏幕截图:

1tuwyuhd

1tuwyuhd1#

您可以在服务器上创建一个本地主机,并将请求重定向到该本地主机。为此,请在主文件夹中创建一个“server.js”文件。在该文件夹中创建一个以生产模式运行的进程(在端口4000上)。server.js:

const { createServer } = require('http');
const { parse } = require('url');
const next = require('next');

const dev = process.env.NODE_ENV !== 'production';
const hostname = 'localhost';
const port = process.env.PORT || 4000;
// when using middleware `hostname` and `port` must be provided below
const app = next({ dev, hostname, port });
const handle = app.getRequestHandler();

app.prepare().then(() => {
createServer(async (req, res) => {
try {
  // Be sure to pass `true` as the second argument to `url.parse`.
  // This tells it to parse the query portion of the URL.
  const parsedUrl = parse(req.url, true);
  const { pathname, query } = parsedUrl;

  if (pathname === '/a') {
    await app.render(req, res, '/a', query);
  } else if (pathname === '/b') {
    await app.render(req, res, '/b', query);
  } else {
    await handle(req, res, parsedUrl);
  }
} catch (err) {
  console.error('Error occurred handling', req.url, err);
  res.statusCode = 500;
  res.end('internal server error');
}
}).listen(port, (err) => {
if (err) throw err;
console.log(`> Ready on http://${hostname}:${port}`);
});
});

之后,创建一个“service.js”文件,将所有URL重定向到本地主机(反向代理)
web.config:

<configuration>
<system.webServer>
    <rewrite>
        <rules>                 
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://localhost:4000/{R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

并在最后生成“service.js”文件,该文件将server.js文件作为服务运行。
service.js:

var Service = require('node-windows').Service;
var path = require('path');

var svc = new Service({
name: 'service name',
description: 'example server',
script: path.join(__dirname, 'server.js'),
workingdirectory: path.join(__dirname, 'server.js'),
nodeOptions: [],
env: {
name: 'NODE_ENV',
value: 'production',
},
});
//svc.uninstall();

svc.on('install', function () {
svc.start();
});

svc.install();

现在使用'node service.js'命令运行service.js。现在您可以在服务器的服务中看到'service name'服务(您可以检查它是否未启动,手动启动它)

  • 要卸载服务,您可以取消注解“svc.uninstall();'行以及有关安装和启动服务的注解行
j8ag8udp

j8ag8udp2#

将以下内容添加到您的package.json脚本中:“prod”:“next export”,并在生成后运行此脚本,然后复制输出文件夹:/输出

bmp9r5qi

bmp9r5qi3#

最简单的解决方案是发布项目并将输出文件(静态html文件和资源)放到一个文件夹中,然后设置一个指向该文件夹的IIS网站。如果您不需要动态呈现,这是可以的。
请看一下这个article,我在其中尝试解释了如何在IIS上部署由next.js构建的静态html网站。

5f0d552i

5f0d552i4#

要在iis上运行node js应用程序,您需要配置iisnode模块。https://github.com/tjanczuk/iisnode
然后运行下面的命令来构建应用程序:

npm run build

这将在.next文件夹中创建生产应用程序。
https://nextjs.org/docs/advanced-features/static-html-export

相关问题