我在OpenShift中创建了一个node.js应用程序,并且我有一个奇怪的问题,我写的所有内容()都显示在响应的主体中作为一个字符串。例如,当一个请求登录页面制作,这是出现的结果:OpenShift node.js应用程序将所有输出以字符串形式写入HTML主体
etc...
如果我检查Chrome的响应,这是它表明:
正如你所看到的,我所有的输出都是作为html体内的字符串发送的。我所有的代码都可以在我的开发环境中正常工作,并且页面被正确发送和显示,这只是OpenShift。我使用的连接库,读取和写入文件,如你所期望的 - 对于上述情况,这将是代码正在运行:
var http = require('http');
var https = require('https');
var fs = require('fs');
var URL = require('url');
var mysql = require('mysql');
var cookies = require('cookies');
var request = require('request');
var bcrypt = require('bcrypt');
var connect = require('connect');
var bodyParser = require('body-parser');
// Setup Connect
var app = connect();
app.use(bodyParser.urlencoded({ extended : true }));
// Set up mysql connection
var connection = mysql.createConnection({
host : process.env.OPENSHIFT_MYSQL_DB_HOST,
user : process.env.OPENSHIFT_MYSQL_DB_USERNAME,
password : process.env.OPENSHIFT_MYSQL_DB_PASSWORD,
port : process.env.OPENSHIFT_MYSQL_DB_PORT,
});
connection.connect();
console.log("Starting server...");
// Main request handler
app.use(function (req, res) {
var url = URL.parse(req.url, true);
var pathname = url.pathname;
console.log("Request for " + pathname);
...
if(pathname === "/") {
loginForm(req, res);
}
...
}
http.createServer(app).listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);
console.log("Server ready.");
function loginForm(req, res) {
fs.readFile('client/login.html', function(err, file) {
if(err) {
res.writeHead(500, {"Content-Type": "text/plain"});
res.write(err + "\n");
res.end();
return;
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(file);
res.end();
});
}
2014-09-13
Nate
+0
您是否尝试过在本地运行它?在openShift之外?这不太可能是一个openShift问题。听起来就像你正在使用一个将响应包装在默认空白HTML模板中的框架。 FWIW我有一个openShift node.js服务器,它工作正常:flitetools-slebetman.rhcloud.com –
2014-09-13 03:54:03
+0
我没有在本地运行它,但我在Cloud9(c9.io)上做了所有测试,并且它在那里运行得非常好。 –
2014-09-13 04:51:50
+0
你能展示一个简化的,最小的,完全可行的服务器代码吗?不仅仅是fs.readFile的剪辑 –
2014-09-13 04:55:10