Express 使用API在Vercel上部署Nuxt JS

Express 使用API在Vercel上部署Nuxt JS,express,nuxt.js,vercel,Express,Nuxt.js,Vercel,我正在尝试将我的nuxt应用程序部署到Vercel上,但每当我尝试发出api请求时,都会不断获取“Cannot GET/api/hello”或任何其他端点。我在日志中没有看到任何错误,它返回404状态。在我当地的环境中,一切都很完美 vercel.json: { "version": 2, "rewrites": [ { "source": "/api/(.*)", "destination

我正在尝试将我的nuxt应用程序部署到Vercel上,但每当我尝试发出api请求时,都会不断获取“Cannot GET/api/hello”或任何其他端点。我在日志中没有看到任何错误,它返回404状态。在我当地的环境中,一切都很完美

vercel.json:

{
  "version": 2,
  "rewrites": [
    { "source": "/api/(.*)", "destination": "/api" }
  ],
  "builds": [
    {
      "src": "api/**/*.js",
      "use": "@vercel/node"
    },
    {
      "src": "nuxt.config.js",
      "use": "@nuxtjs/vercel-builder",
      "config": {
        "serverFiles": ["api/**"]
      }
    }
  ]
}
numxt.config.js

// Server Middleware API
  serverMiddleware:
    process.env.NODE_ENV === 'production'
      ? []
      : [
          { path: '/api', handler: '~/api/index' },
          { path: '/api/hello', handler: '~api/hello' }
        ],
import express from 'express'
import bodyParser from 'body-parser'

const app = express()
app.use(bodyParser.json())

app.get('/', (req, res) => {
  res.status(200).json('test - get').end()
})

app.post('/', (req, res) => {
  res.status(200).json('test - post').end()
})

export default app
serverMiddleware: ['~/api', '~/api/hello']
import express from 'express'

const app = express()
app.use(express.json())

app.get('/', (req, res) => res.send('test-get'))
app.post('/', (req, res) => res.send('test-post'))

export default { path: '/api/hello', handler: app }
import express from 'express'
import users from './users'

const app = express()

app.use(express.json())
app.use('/users', users)

app.get('/', (req, res) => res.send('Hi from /api'))

export default { path: '/api', handler: app }
/api/hello.js

// Server Middleware API
  serverMiddleware:
    process.env.NODE_ENV === 'production'
      ? []
      : [
          { path: '/api', handler: '~/api/index' },
          { path: '/api/hello', handler: '~api/hello' }
        ],
import express from 'express'
import bodyParser from 'body-parser'

const app = express()
app.use(bodyParser.json())

app.get('/', (req, res) => {
  res.status(200).json('test - get').end()
})

app.post('/', (req, res) => {
  res.status(200).json('test - post').end()
})

export default app
serverMiddleware: ['~/api', '~/api/hello']
import express from 'express'

const app = express()
app.use(express.json())

app.get('/', (req, res) => res.send('test-get'))
app.post('/', (req, res) => res.send('test-post'))

export default { path: '/api/hello', handler: app }
import express from 'express'
import users from './users'

const app = express()

app.use(express.json())
app.use('/users', users)

app.get('/', (req, res) => res.send('Hi from /api'))

export default { path: '/api', handler: app }
更新

numxt.config.js

// Server Middleware API
  serverMiddleware:
    process.env.NODE_ENV === 'production'
      ? []
      : [
          { path: '/api', handler: '~/api/index' },
          { path: '/api/hello', handler: '~api/hello' }
        ],
import express from 'express'
import bodyParser from 'body-parser'

const app = express()
app.use(bodyParser.json())

app.get('/', (req, res) => {
  res.status(200).json('test - get').end()
})

app.post('/', (req, res) => {
  res.status(200).json('test - post').end()
})

export default app
serverMiddleware: ['~/api', '~/api/hello']
import express from 'express'

const app = express()
app.use(express.json())

app.get('/', (req, res) => res.send('test-get'))
app.post('/', (req, res) => res.send('test-post'))

export default { path: '/api/hello', handler: app }
import express from 'express'
import users from './users'

const app = express()

app.use(express.json())
app.use('/users', users)

app.get('/', (req, res) => res.send('Hi from /api'))

export default { path: '/api', handler: app }
/api/hello.js

// Server Middleware API
  serverMiddleware:
    process.env.NODE_ENV === 'production'
      ? []
      : [
          { path: '/api', handler: '~/api/index' },
          { path: '/api/hello', handler: '~api/hello' }
        ],
import express from 'express'
import bodyParser from 'body-parser'

const app = express()
app.use(bodyParser.json())

app.get('/', (req, res) => {
  res.status(200).json('test - get').end()
})

app.post('/', (req, res) => {
  res.status(200).json('test - post').end()
})

export default app
serverMiddleware: ['~/api', '~/api/hello']
import express from 'express'

const app = express()
app.use(express.json())

app.get('/', (req, res) => res.send('test-get'))
app.post('/', (req, res) => res.send('test-post'))

export default { path: '/api/hello', handler: app }
import express from 'express'
import users from './users'

const app = express()

app.use(express.json())
app.use('/users', users)

app.get('/', (req, res) => res.send('Hi from /api'))

export default { path: '/api', handler: app }
/api/index.js

// Server Middleware API
  serverMiddleware:
    process.env.NODE_ENV === 'production'
      ? []
      : [
          { path: '/api', handler: '~/api/index' },
          { path: '/api/hello', handler: '~api/hello' }
        ],
import express from 'express'
import bodyParser from 'body-parser'

const app = express()
app.use(bodyParser.json())

app.get('/', (req, res) => {
  res.status(200).json('test - get').end()
})

app.post('/', (req, res) => {
  res.status(200).json('test - post').end()
})

export default app
serverMiddleware: ['~/api', '~/api/hello']
import express from 'express'

const app = express()
app.use(express.json())

app.get('/', (req, res) => res.send('test-get'))
app.post('/', (req, res) => res.send('test-post'))

export default { path: '/api/hello', handler: app }
import express from 'express'
import users from './users'

const app = express()

app.use(express.json())
app.use('/users', users)

app.get('/', (req, res) => res.send('Hi from /api'))

export default { path: '/api', handler: app }

构建在本地工作吗?是的,一切正常本地LyServerMiddleWare:[{path:'/api',handler:'~/api/'}],再次感谢Shimon。您是否对任何Vercel设置进行了任何调整?我仍然收到错误“Cannot GET/api/hello”不,我没有在Vercel上更改任何内容。可能是您的/api/index.js捕获了所有路由,而您没有侦听/hello?可能是这样。它适用于index.js路由,但不适用于任何其他路由。如何更改vercel.json文件以允许api/index和api/hello或任何其他子目录?我一直在测试重写配置,但仍然有问题:{“source”:/api/(.*),“destination”:/api},