Skip to content

Server.ts changes are not being process after deploying to nelify but works fine locally  #135

Closed
@mrrohit1

Description

@mrrohit1

Describe the bug
Update my server.ts file to manage 301 redirect and added sanitization for json in final souuce code but both changes are not working, i can see its working locally but after deploying to netlify its not working

To Reproduce
Steps to reproduce the behavior:

  1. Make 301 redirects in server.ts file
function app(): express.Express {
  const server = express();
  const serverDistFolder = dirname(fileURLToPath(import.meta.url));
  const browserDistFolder = resolve(serverDistFolder, '../browser');
  const indexHtml = join(serverDistFolder, 'index.server.html');

  const commonEngine = new CommonEngine();

  server.set('view engine', 'html');
  server.set('views', browserDistFolder);

  server.get('*.*', express.static(browserDistFolder, {
    maxAge: '1y'
  }));
  

  server.get('*', (req, res, next) => {
    const { protocol, originalUrl, baseUrl, headers } = req;

    const redirectUrl = redirectMap[req.url];
    if (redirectUrl) {
      res.redirect(301, redirectUrl);
    }else{
      
    commonEngine
    .render({
      bootstrap,
      documentFilePath: indexHtml,
      url: `${protocol}://${headers.host}${originalUrl}`,
      publicPath: browserDistFolder,
      providers: [
        { provide: APP_BASE_HREF, useValue: baseUrl },
      ],
    })
    .then((html) => {
      
      // Extract the state
      const stateRegex = /<script id="ng-state" type="application\/json">(.*?)<\/script>/;
      const match = html.match(stateRegex);
      if (match && match[1]) {
        const state = JSON.parse(match[1]);  
        const sanitizedState = sanitizeState(state);        
        const serializedState = JSON.stringify(sanitizedState);
        // Replace the original state with the sanitized state
        html = html.replace(stateRegex, `<script id="ng-state" type="application/json">${serializedState}</script>`);
      }
      
      res.send(html);
      
    })
    .catch((err) => next(err));
    }

  });

  return server;
}

function run(): void {
  const port = process.env['PORT'] || 4000;

  const server = app();
  server.listen(port, () => {
    console.log(`Node Express server listening on http://localhost:${port}`);
  });
}

run();

redirectMap:

export const redirectMap: { [key: string]: string }  = {
'old url 1' :  'new url 1',
'old url 2' :  'new url 2',
'old url 3' :  'new url 3',
// other urls 
}

sanitize-state :

export function sanitizeState(state: any): any {
    const sanitizedState = JSON.parse(JSON.stringify(state));
  
    Object.keys(sanitizedState).forEach(key => {
      if (sanitizedState[key]?.u) {
        delete sanitizedState[key].u;
      }
    });
  
    return sanitizedState;
  }

Expected behavior
after deployment redirect should work but its not working and same for sanitize state

Versions

  • Angular.js: 18

If you're using the CLI to build
N/A

If you're using file-based installation

[build]
  command = "npm run build"
  publish = "dist/dapps/browser"

[[plugins]]
  package="@netlify/angular-runtime"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

reason for using redirect in server.ts because redirect is not supported in SSR and i have to redirect more than 3000 urls

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions