获取一个https express节点应用程序以在共享主机上工作

时间:2018-12-22 14:38:55

标签: node.js express

所以我在这里迷失了方向,确实需要一些指导。

我一直在关注edX上的Microsoft“ NodeJS入门”课程。我们必须使用express创建一个非常简单的RESTful博客api。我一直在尝试使其在我的namecheap共享主机上运行。

我所做的:

  • 跟随these instructions安装具有最新稳定版本的node的nvm。
  • 跟随this question使我的Express应用程序与https一起使用
  • 将应用程序上传到托管服务器。
  • 通过SSH进入托管服务器,运行npm install
  • 运行node server.js以启动服务器。似乎可以开始。
  • 尝试在应用程序正在https://samkeene.co.uk:3000/blog-api上监听的端口上导航至我的网站
  • 期望看到“ Hello World”,但超时。

server.js

const routes = require('./routes');
const express = require('express');
const logger = require('morgan');
const bodyParser = require('body-parser');
const errorhandler = require('errorhandler');
const https = require('https');
const fs = require('fs');
const path = require('path');

let store = {
    posts: []
};

let key = fs.readFileSync(path.join(__dirname,'../../ssl/keys/c07f7_003d1_ecb06ccb2afcd72cfa43b6011c82464e.key'));
let cert = fs.readFileSync(path.join(__dirname,'../../ssl/certs/samkeene_co_uk_c07f7_003d1_1574035199_5b90fc5e96ac0c534d2ee116af6fd342.crt'));
let options = {
    key: key,
    cert: cert
};

let app = express();
app.use(bodyParser.json());
app.use(logger('dev'));
app.use(errorhandler());

app.use((req, res, next) => {
    req.store = store;
    next();
});

app.get('/', (req, res) => {
    res.send('hello world')
});

app.get('/posts', routes.Posts.getPosts);
app.post('/posts', routes.Posts.addPost);
app.put('/posts/:postID', routes.Posts.updatePost);
app.delete('/posts/:postID', routes.Posts.removePost);

app.get('/posts/:postID/comments', routes.Comments.getComments);
app.post('/posts/:postID/comments/', routes.Comments.addComment);
app.put('/posts/:postID/comments/:commentID', routes.Comments.updateComment);
app.delete('/posts/:postID/comments/:commentID', routes.Comments.removeComment);

let server = https.createServer(options, app);

server.listen(3000, () => {
    console.log("server starting on port : " + 3000)
});

其余文件可在其git repo中找到。 (或导航至https://www.samkeene.co.uk/blog-api/

非常感谢您的帮助。

编辑:我决定尝试是否可以运行更简单的应用程序:

server.js

const express = require('express');

let app = express();

app.get('/', (req, res) => {
    console.log("hello");
    res.send('hello world')
});

app.listen(3001);

这遇到了同样的麻烦!连接超时。我真的很茫然。

2 个答案:

答案 0 :(得分:0)

可能与您正在监听的端口有关。

对于http,请在端口8080上监听

对于https,请在端口443上监听

答案 1 :(得分:0)

一旦我位于共享主机上,我也为此挠了一下头。

我设法通过运行带有NodeJS 9.11.2版本的cPanel设置NodeJS应用程序来运行以下命令:

var express = require('express');
var app = express();

app.get('/', function(req, res) {
    res.send('Howdy! req.url: '+req.url);
});
app.get('/users', function(req, res) {
    res.send('Should send a bunch of users!');
});
app.get('/things/:name/:id', function(req, res) {
    res.send('id: ' + req.params.id + ' and name: ' + req.params.name);
});
app.listen();

我不必关心端口号,也可以通过HTTPS访问这些端点。

以您为例,只需删除3001并查看它是否可以与共享主机一起使用。

希望有帮助。 :)