Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJs与express generator的HTTPS连接_Javascript_Node.js_Express - Fatal编程技术网

Javascript NodeJs与express generator的HTTPS连接

Javascript NodeJs与express generator的HTTPS连接,javascript,node.js,express,Javascript,Node.js,Express,我已经使用express generator创建了一个应用程序,该应用程序一切正常,但我现在想使用HTTPS运行该应用程序,我已尝试将/bin/www中的节点服务器文件配置为以下内容: #!/usr/bin/env node /** * Module dependencies. */ var debug = require('debug')('****:server'); var https = require('https'); var fs = require('fs'); /**

我已经使用express generator创建了一个应用程序,该应用程序一切正常,但我现在想使用HTTPS运行该应用程序,我已尝试将
/bin/www
中的节点服务器文件配置为以下内容:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var debug = require('debug')('****:server');
var https = require('https');
var fs = require('fs');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3001');
app.set('port', port);


var options = {
    path: '../app',
    port: 443,
    key: fs.readFileSync('/var/www/vhosts/keys/wildcard.****.com.key'),
    cert: fs.readFileSync('/var/www/vhosts/keys/wildcard.****.com.crt')
}


/**
 * Create HTTPS server.
 */

var server = https.createServer(options);
但当我将应用程序指向https://

时,我无法再访问它。请尝试以下操作:

var express=require('express');
var https=require('https');
var http=require('http');
var fs=需要('fs');
//这一行来自Node.js HTTPS文档。
变量选项={
key:fs.readFileSync('test/fixtures/keys/agent2 key.pem'),
证书:fs.readFileSync('test/fixtures/keys/agent2-cert.cert'))
};
//创建一个服务(app对象只是一个回调)。
var-app=express();
//创建一个HTTP服务。
http.createServer(app.listen)(80);
//创建与HTTP服务相同的HTTPS服务。

https.createServer(选项,应用程序).listen(443)我在使用express generator创建bin/www文件并将其重命名为wwws后解决了这个问题。然后在package.json中,我更改了指向新脚本的“source”属性

...
"scripts": {
    "start": "node ./bin/wwws"
  },
...
在wwws中,我使用https服务器而不是http,然后重定向http请求。 这里是我的新wwws文件。我删除了WWW文件中间的HTTP线,最后添加了新的服务器部分。
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('phishsense:server');
var http = require('http');

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}


// Add HTTPS Section
var fs = require('fs');
var https = require('https');
var http_port = normalizePort(process.env.PORT || '8080');
var https_port    =   process.env.PORT_HTTPS || 8443; 
var options = {
 key  : fs.readFileSync('server.key'),
 cert : fs.readFileSync('server.crt')
};

app.set("port",https_port);

/*
° Create HTTPS server.
*/ 
server = https.createServer(options, app).listen(https_port, function () {
 console.log('Magic happens on port ' + https_port); 
});

/**
* Listen on provided port, on all network interfaces.
*/

server.listen(https_port);
server.on('error', onError);
server.on('listening', onListening);

// Redirect from http port to https
http.createServer(function (req, res) {
  res.writeHead(301, { "Location": "https://" + req.headers['host'].replace(http_port,https_port) + req.url });
  console.log("http requet, will go to >> ");
  console.log("https://" + req.headers['host'].replace(http_port,https_port) + req.url );
  res.end();
}).listen(http_port);

这对我来说是可行的,让express generator创建的结构不受影响。

可能的重复不是重复。这个问题是关于将express自动生成的代码与https集成的。不仅仅是在节点上设置SSL。这些编辑不是对app.js文件而不是www文件进行的吗?