Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 如何使我的所有路由都具有https并强制http到https?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何使我的所有路由都具有https并强制http到https?

Javascript 如何使我的所有路由都具有https并强制http到https?,javascript,node.js,express,Javascript,Node.js,Express,我不明白如何强制所有路由都使用https,并始终强制http到https。有人能给我建议我应该如何更改下面的代码吗?我还是node.js的新手。任何帮助都将不胜感激 index.js const express = require('express'); const hbs = require('hbs'); const path = require('path'); var morgan = require('morgan') var session = require('express-se

我不明白如何强制所有路由都使用https,并始终强制http到https。有人能给我建议我应该如何更改下面的代码吗?我还是node.js的新手。任何帮助都将不胜感激

index.js

const express = require('express');
const hbs = require('hbs');
const path = require('path');
var morgan = require('morgan')
var session = require('express-session')
const MongoStore = require('connect-mongo')(session);
var passport = require('passport')
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/sth');

const mainMiddleware = require('./middleware/main.js');
const port = process.env.PORT || 3000;
var app = express();
app.use(morgan('dev'))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true})); // for parsing application/x-www-form-urlencoded

app.use(session({
    secret: 'alsjbfkajsbef09876', //salt
    resave: false, // always re-init cookie
    saveUninitialized: false, // always create session even if not log in
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}))
app.use(passport.initialize());
app.use(passport.session());

app.use('/public', express.static(path.join(__dirname,'public')));

app.set('view engine', 'hbs');

app.use(mainMiddleware);

app.get('/', function (req, res) {
    let loginStatus = req.isAuthenticated() ? "DASHBOARD" : ""
    let dashboard = req.isAuthenticated() ? "/client/current" : "/"
    res.render('frame.hbs', {content: 'homeContent', css: 'home.css', dashboard, loginStatus, script: ['online-tracking.js']})
})

//----include routes
app.use('/api', require('./routes/api'));
app.use('/', require('./routes/page'));
app.use('/client', require('./routes/client-page'));
app.use('/admin', require('./routes/admin-page'));


//----connecting to port
app.listen(port,()=>{
    console.log(`success connection to port ${port}`);
})

如果你想用https加密你的连接,你需要一个SSL证书来验证你是一个真正的人,这是对你的内容的承诺。大多数托管服务(如Microsoft Azure和Amazon Web services)都提供了创建SSL证书的可能性

请尝试在Express项目中包含此代码

var http=require('http');
var https=require('https');
应用程序集(“端口”,端口);
应用程序集('secPort',端口+443);
var server=http.createServer(app);
监听(端口);
server.on('error',onError);
server.on('listing',onListening);
变量选项={
key:fs.readFileSync('/private.key'),
证书:fs.readFileSync('/certificate.pem')
};
var secureServer=https.createServer(选项,应用程序);
secureServer.listen(app.get('secPort'),()=>{
console.log('server listing on port',app.get('secPort');
});
secureServer.on('error',onError);
secureServer.on('listing',onListening);
应用程序所有(“*”,(请求、恢复、下一步)=>{
如果(请求安全){
返回next();
}否则{
res.redirect(307,'https://'+req.hostname+':'+app.get('secPort')+req.url);
}
});使用greenlock express(可在NPM上获得)这非常简单,而且它还可以使用LetsEncrypt提供的SSL证书将您连接起来。下面是文档中的示例脚本

“严格使用”;
需要('greenlock-express')。创建({
//让我们加密v2是ACME草案11
版本:“草案-11”
//注意:如果一开始没有成功,请切换到登台调试
// https://acme-staging-v02.api.letsencrypt.org/directory
,服务器:'https://acme-v02.api.letsencrypt.org/directory'
//保存证书的位置必须具有写入权限
,configDir:“~/.config/acme/”
//您必须将此更改为有效的电子邮件地址
,电邮:“约翰。doe@example.com'
//您必须将这些域更改为有效域
//注意:所有域都将被验证并列在证书上
,认可域名:['example.com','www.example.com']
//您不能在未询问用户的情况下构建接受ToS的客户端
是的
,app:require('express')()。使用('/',函数(req,res){
res.setHeader('Content-Type','text/html;charset=utf-8')

res.end('Hello,World!\n\n请记住,当您使用节点时,您的指尖就可以找到整个NPM存储库。.快速搜索我找到了此->@Keith谢谢。我一定会研究如何将重定向ssl合并到我的应用程序中。这并不能真正回答问题,这是关于在非ssl上重定向到启用ssl的网站。