具有自定义快递服务器的nextjs不会在生产中重定向url

时间:2020-08-17 11:00:41

标签: node.js reactjs express next.js vercel

我在Vercel上托管了一个NextJS项目 我已添加server.js文件以使用自定义快递服务器,该服务器将301重定向一些网址 当我在本地运行重定向时,可以正常工作,但是当我在Vercel上将代码推送到生产环境时,重定向不起作用

这是server.js文件:

const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')

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

app.prepare().then(() => {
    const server = express()
    server.use(bodyParser.json())

    //Redirect to main page
    server.get(
        [
            '/product-tag/885-m2/?orderby=menu_order',
            '/product-tag/885-m2/?orderby=price',
            '/cutter/mwhzt-zvvit/mwhzt-zvvit-2.html?___store=default&___from_store=english',
            '/sales/guest/form/'
        ]
        , (req, res) => {
            res.redirect(301, '/')
        })

    server.get('*', (req, res) => {
        return handle(req, res)
    })

    server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Read on http://localhost:3000')
    })
})

这是我的package.json脚本部分:

  "scripts": {
    "dev": "node --inspect server.js",
    "build": "next build",
    "start": "NODE_ENV=production node server.js",
  },

1 个答案:

答案 0 :(得分:0)

网址通常不包含查询参数,即“?”之后的部分在请求中。试试这个吧。

    server.get('*', (req, res) => {
        const redirectUrls = [
            '/product-tag/885-m2/?orderby=menu_order',
            '/product-tag/885-m2/?orderby=price',
            '/cutter/mwhzt-zvvit/mwhzt-zvvit-2.html?___store=default&___from_store=english',
            '/sales/guest/form/'
        ]; 
        if (redirectUrls.includes(req.url)) {
          res.redirect(301, '/');
        }
        next();
    })

还请确保您在上面写下

server.get('*', (req, res) => {
  return handle(req, res)
})

否则,代码将永远无法运行。