next.js 不能得到.css和,在IIS上托管下一个js应用程序时,js文件

kcrjzv8t  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(129)

我有点问题。css和.js文件我的网站,当我尝试打开我的托管网站。我的网站是下一个js应用程序,托管在IIS服务器上。请注意,我不是一个JavaScript开发人员,这是我第一次部署Next.js应用程序)。
请求看起来像这样:Site requests
单个请求看起来像这样:Single one request
当我部署到IIS时,我配置了以下Web。配置和服务器。js。
web.config:

<configuration>
  <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Methods" value="*" />
          <add name="Access-Control-Allow-Headers" value="*" />
        </customHeaders>
      </httpProtocol>

    <webSocket enabled="false" />

    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
    </handlers>

    <rewrite>
      <rules>
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^server.js\/debug[\/]?" />
        </rule>

        <rule name="StaticContent">
          <action type="Rewrite" url=".next/static"/>
        </rule>

        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="server.js"/>
        </rule>
      </rules>
    </rewrite>
    
    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="node_modules"/>
        </hiddenSegments>
      </requestFiltering>
    </security>

    <httpErrors existingResponse="PassThrough" />

    <iisnode 
        watchedFiles="web.config;*.js;node_modules\*;"
        node_env="production"
        />
  </system.webServer>
</configuration>

server.js:

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

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url, true)
      handle(req, res, parsedUrl)
  }).listen(process.env.PORT || 8000, (err) => {
    if (err) throw err
    console.log('> Ready on ')
  })
})

在我看来,这个问题与静态文件的可用性有关,但我不明白如何正确配置它们。

sgtfey8w

sgtfey8w1#

出现404的原因有很多。如果这是你第一次部署下一个js应用程序的经验。关于在IIS中部署Next Js项目,可以参考这个答案。它需要NodeJS,URLRewrite和IISNode在您的服务器上。
链接:https://stackoverflow.com/a/67212396/20058276
重要的是,iisnode在很长一段时间内不需要维护。您可以尝试使用HttpPlatformHandler。https://halfblood.pro/running-nodejs-web-apps-on-iis-with-httpplatformhandler/
本教程文档来自Lex Li。也许这篇文章可以提供更好的帮助。

相关问题