Извлечение 301 данных перенаправления в server.js (Express / NextJS) - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над проектом с использованием Express и Next js, и я нашел отличный пример того, как настроить массив данных для ваших перенаправлений в файле server.js.Однако, если это возможно, я хотел бы создать плагин в WordPress, который позволит пользователю отправлять данные для перенаправлений, чтобы ими мог управлять кто-то без технических знаний.У меня вопрос, возможно ли получить данные в моем файле server.js, чтобы заменить данные в этом примере?

const express = require('express')
const next = require('next')
const { join } = require('path')

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

//This is the data I want to fetch through the WP Rest API
const redirects = [
  { from: '/old-link-1', to: '/new-link-1' },
  { from: '/old-link-2', to: 'https://externalsite.com/new-link-2' },
]

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

  redirects.forEach(({ from, to, type = 301, method = 'get' }) => {
    server[method](from, (req, res) => {
      res.redirect(type, to)
    })
  })

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

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

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Итак, если кто-то еще наткнется на проблему программного добавления перенаправлений, возникающих при установке WordPress, это то, как это можно сделать.Мой технический стек - React, Next.js с сервером Express, который извлекает данные из установки WordPress, которая живет в других местах в сети.

WordPress:

1) Создайте пустой плагин WordPress (Google - ваш друг)

2) Создайте ловушку активации в вашем плагине для создания базы данных (опять же, Google с 'to_url' и 'from_url' для каждой записи.

3) ЗарегистрируйтеМаршрут отдыха в плагине (как описано выше с ответом Таннера)

  • Этот маршрут отдыха должен извлекать вашу информацию из базы данных и возвращать ее в виде массива в следующем формате:

    [{'from': '/ about', 'to': '/ about-us'}, {'from': '/ test3', 'to': '/ banks / testing-page'},]

4) Создайте страницу администрирования плагина с формой, которая позволяет пользователям добавлять записи в эту базу данных.По мере роста вашей базы данных ваш ответ от остальных API будет расти, и ваши перенаправления будут беспрепятственно включены в ваш проект.

5) В вашем React server.js вам понадобится следующая настройка

const request = require("request");
let redirects;
request('https://yourwebsite.com/wp-json/YOUR-ROUTE/v2/redirects', function (error, response, body) {
   if (!error && response.statusCode == 200) {
      redirects = JSON.parse(body);
   }
 })
redirects.forEach(({ from, to, type = 301, method = 'get' }) => {
          server[method](from, (req, res) => {
            res.redirect(type, to)
          })
        });

Предостережения: Убедитесь, что когда вы манипулируете данными с формами в php, вы принимаете надлежащие меры предосторожности, чтобы очистить и избежать всего.

0 голосов
/ 28 сентября 2018

Да, я полагаю, что возможно сделать что-то подобное.

Эта библиотека позволит вам сделать запрос API в пределах экспресс: https://github.com/request/request

Выполнено так:

 var request = require('request');
 request('http://www.google.com', function (error, response, body) {
   if (!error && response.statusCode == 200) {
     console.log(body) // Print the google web page.
   }
 })

Следующим шагом будет создание конечной точки в WordPress со всеми 301, которые вы хотите создать:

function my_custom_endpoint(){
  return 'Hey look, its some data';
}

// Register the rest route here.
add_action( 'rest_api_init', function () {
register_rest_route( 'yournamespace/v1', 'my_custom_endpoint',array(
    'methods'  => 'GET',
    'callback' => 'my_custom_endpoint'
  ));
});

Удачи и удачного кодирования!

...