Javascript 无法访问Google Compute Engine上托管的NodeJS Express应用程序
我在谷歌云上有一个f1微实例。在已安装的ubuntu 14.04、NodejS 0.10和mongoDB中。现在,我用yeoman制作了一个express应用程序,它在localhost上运行得非常好。但是当我尝试在实例中运行它时,我无法访问它 以下是我的工作:Javascript 无法访问Google Compute Engine上托管的NodeJS Express应用程序,javascript,node.js,Javascript,Node.js,我在谷歌云上有一个f1微实例。在已安装的ubuntu 14.04、NodejS 0.10和mongoDB中。现在,我用yeoman制作了一个express应用程序,它在localhost上运行得非常好。但是当我尝试在实例中运行它时,我无法访问它 以下是我的工作: 将本地代码提交到BitBucket 通过SSH将代码从BitBUcket克隆到Google计算引擎 运行命令grunt 使用浏览器上的端口号访问谷歌提供的外部IP,但谷歌表示此网页不可用 以下是我的源代码: **app.js** 'us
'use strict';
// Module dependencies.
var express = require('express'),
path = require('path'),
fs = require('fs'),
methodOverride = require('method-override'),
morgan = require('morgan'),
bodyParser = require('body-parser'),
errorhandler = require('errorhandler');
var app = module.exports = exports.app = express();
app.locals.siteName = "Server";
// Connect to database
var db = require('./config/db');
app.use(express.static(__dirname + '/public'));
// Bootstrap models
var modelsPath = path.join(__dirname, 'models');
fs.readdirSync(modelsPath).forEach(function (file) {
require(modelsPath + '/' + file);
});
var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
app.use(morgan('dev'));
app.use(errorhandler({
dumpExceptions: true,
showStack: true
}));
app.set('view options', {
pretty: true
});
}
if ('test' == env) {
app.use(morgan('test'));
app.set('view options', {
pretty: true
});
app.use(errorhandler({
dumpExceptions: true,
showStack: true
}));
}
if ('production' == env) {
app.use(morgan());
app.use(errorhandler({
dumpExceptions: false,
showStack: false
}));
}
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Bootstrap routes
var routesPath = path.join(__dirname, 'routes');
fs.readdirSync(routesPath).forEach(function(file) {
app.use('/', require(routesPath + '/' + file));
});
// Bootstrap api
var apiPath = path.join(__dirname, 'api');
fs.readdirSync(apiPath).forEach(function(file) {
app.use('/api', require(apiPath + '/' + file));
});
// Start server
var port = process.env.PORT || 3000;
app.listen(port, function () {
console.log('Express server listening on port %d in %s mode', port, app.get('env'));
});
**Grunfile.js**
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
// Configure a mochaTest task
mochaTest: {
test: {
options: {
reporter: 'spec'
},
src: ['test/**/*.js']
}
},
watch: {
options: {
livereload: true,
},
express: {
files: [ '*.js','routes/*.js', 'models/*.js', 'config/*.js','api/*.js' ],
tasks: [ 'express:dev' ],
options: {
spawn: false // Without this option specified express won't be reloaded
}
}
},
express: {
options: {
port : 3000,
node_env: 'development'
},
dev: {
options: {
script: 'app.js',
node_env: 'development'
}
},
prod: {
options: {
script: 'app.js',
node_env: 'production'
}
}
},
open: {
server: {
url: 'http://localhost:3000'
}
}
});
grunt.registerTask('test', 'mochaTest');
grunt.registerTask('server', function(arg) {
if(arg && arg == 'prod')
{
grunt.task.run([
'express:prod',
'open',
'watch'
]);
}
else
{
grunt.task.run([
'express:dev',
'open',
'watch'
]);
}
});
grunt.registerTask('default', [ 'server' ]);
grunt.registerTask('dist', [ 'server:prod' ]);
};
我试着改变这个应用程序。用谷歌提供的内部IP收听,但仍然没有成功。有什么想法吗?好吧,我就想出来了。其实很简单。 问题只出在端口上。我只需要更改防火墙设置以允许来自任何源的端口。就这样
2017年4月27日更新:GCE上的流程现在略有变化。编辑源过滤器->ip范围为0.0.0.0/0确定到目前为止,我已将端口更改为80,看起来可以正常工作。然而,我想使用端口3000,不知道如何在谷歌云控制台中使用它。对我来说,HTTP/HTTPS流量不会进入我的应用程序端口(不是默认值),所以我必须编辑默认的允许HTTP、默认允许HTTPS防火墙规则。