Maison >interface Web >js tutoriel >Comment créer un serveur Web avec nodejs

Comment créer un serveur Web avec nodejs

不言
不言avant
2019-01-02 10:02:374714parcourir

Le contenu de cet article concerne la méthode de construction d'un serveur Web avec nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Le front-end rencontre souvent des problèmes inter-domaines lors de l'obtention de données. Ce problème peut être résolu en utilisant nginx comme proxy inverse. Cependant, nginx est un proxy middleware et les adresses des serveurs Web déployés par différents développeurs peuvent être différentes, de sorte que la configuration de nginx ne peut pas être universelle.

Si vous pouvez disposer d'un proxy client et le soumettre avec le code source du projet, vous pouvez éliminer le besoin de configurations de proxy pour différents développeurs. webpack-dev-server est un tel proxy client, mais si le projet n'utilise pas webpack, il n'y a aucun moyen de l'utiliser. Pouvez-vous imiter et écrire un simple serveur Web pour des projets non-webpack ? Vous trouverez ci-dessous le code, j'espère que vous pourrez me critiquer et me corriger.

const request = require('request');
const express = require('express');
const path = require('path');

const app = express();

// 代理配置
const proxyTable = {  
    '/api': {
        target: 'http://localhost/api' 
    }
};
app.use(function(req, res,next) {  
    const url = req.url;  
    if (req.method == 'OPTIONS') {      
      console.log('options_url: ', url); 
      
       //  设置cors 跨域
      // res.header("Access-Control-Allow-Origin", req.headers.origin || '*');
      // res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
      // res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

      // 设置 cookie
      // res.header("Access-Control-Allow-Credentials", true);
      
      res.status(200).send('OK');     
      return;
    } 
    // console.log('req_url: ', url);
    next();
});

// 设置静态目录
app.use(express.static(path.join(__dirname, 'static')));

app.use('/', function(req, res) {  
      const url = req.url; 
      const proxy = Object.keys(proxyTable);  
      let not_found = true; 
      for (let index = 0; index < proxy.length; index++) {    
          const k = proxy[index];    
          const i = url.indexOf(k);   
          if (i >= 0) {     
              not_found = false;     
              const element = proxyTable[k];      
              const newUrl = element.target + url.slice(i+k.length);
              req.pipe(request({url: newUrl, timeout: 60000},(err)=>{
                  if(err){          
                      console.log('error_url: ', err.code,url);           
                      res.status(500).send('');
                  }     
              })).pipe(res);      
              break;
          } 
      }  
      if(not_found) {    
          console.log('not_found_url: ', url);
          res.status(404).send('Not found');
      } else {    
          console.log('proxy_url: ', url);
      }
});

// 监听端口      
const PORT = 8080;
app.listen(PORT, () => {  
    console.log('HTTP Server is running on: http://localhost:%s', PORT);
});

PS : statique mettre une page statique

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer