带有graphql cli的Azure node.js相对路径

4xrmg8kj  于 2023-02-18  发布在  Node.js
关注(0)|答案(1)|浏览(101)

我有一个小的node.js应用程序,作为graphql-cli创建的graph-api。在localhost上一切都很好,但是当我尝试在azure中将其作为web应用程序运行时,我似乎遇到了路径问题。下面的代码片段在运行npm start的localhost上工作

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: req => ({
    ...req,
    db: new Prisma({
      typeDefs: 'src/generated/prisma.graphql',
      endpoint: 'xxx',
      secret: 'xxx',
      debug: true,
    }),
  }),
})

定义其中一个. graphql文件的路径:

typeDefs: './src/schema.graphql',

考虑到index.js与schema.graphql在同一文件夹中的文件夹结构,我觉得有点奇怪

无论如何,这是在localhost上工作,但当尝试将其作为Azure Web应用程序运行时,我得到以下错误:

No schema found for path: D:\home\site\wwwroot\src\src\schema.graphql

由于这只是一个搭建的应用程序,我不想改变代码中的路径。我不认为它们是错误的,因为它是在localhost上工作的。我想我在azure上遗漏了一些配置。
这是我的网页配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <webSocket enabled="false" />
    <handlers>      
      <add name="iisnode" path="src/index.js" verb="*" modules="iisnode"/>
    </handlers>
    <rewrite>
      <rules>        
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^src/index.js\/debug[\/]?" />
        </rule>
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}"/>
        </rule>        
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="src/index.js"/>
        </rule>
      </rules>
    </rewrite>    
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin"/>
        </hiddenSegments>
      </requestFiltering>
    </security>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

而我的iisnode.yml看起来就像这样:

nodeProcessCommandLine: "D:\Program Files (x86)\nodejs\8.4.0\node.exe"

我已经尝试了许多不同的节点版本,但我目前在我的本地主机上运行8.4.0,它可以正常工作
有人有什么想法吗?

8cdiaqws

8cdiaqws1#

您需要将index.js文件移动到根目录,并将web.config更改为:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <webSocket enabled="false" />
    <handlers>      
      <add name="iisnode" path="index.js" verb="*" modules="iisnode"/>
    </handlers>
    <rewrite>
      <rules>        
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^index.js\/debug[\/]?" />
        </rule>
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}"/>
        </rule>        
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="index.js"/>
        </rule>
      </rules>
    </rewrite>    
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin"/>
        </hiddenSegments>
      </requestFiltering>
    </security>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

相关问题