node.js - 示例 Hello World Express 应用程序正在返回二进制数据
问题描述
以下似乎不起作用。这是简单的 Express 示例代码。您可以忽略其他响应。我只是想让基本的 '/' 主页正常工作,但它拒绝工作。代码如下:
var express = require('express');
var sR = require('./routes/index');
var path = require('path');
var urlencoded = require('url');
var bodyParser = require('body-parser');
var json = require('json');
var methodOverride = require('method-override');
var jade = require('jade');
var fs = require('fs');
var http = require('http2');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const dbLoc = 'mongodb://localhost:27017';
const dbName = 'gothamDB';
var dbConn = null;
const dbURL = "mongodb://gotthamUser:abcd1234@localhost:27017/gothamDB"
const mongoClient = new MongoClient(dbURL, { useNewUrlParser: true, useUnifiedTopology: true});
// Use connect method to connect to the server
dbConn = mongoClient.connect(function(err, client) {
assert.strictEqual(null, err);
console.log("Connected successfully to server");
dbConn = client;
});
var app = express();
app.set('port', 8080);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', jade);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.set('/', function(req, res){
res.send("Hello World");
res.end();
console.log("Hello World sent");
});
app.post('/create_collection', function(req, res){
var db = dbConn.db('gothamDB');
var userData = db.createCollection(req.body.coll_name, function(err){
if(err){
res.send('Error creating database: ' + req.body.coll_name);
return;
}
res.send('Database ' + req.body.dbname + ' created successfully');
});
});
app.post('/new_contact', function(req, res){
var name = req.body.name;
var phone = req.body.phone;
var db = dbConn.db('gothamDB');
var coll = db.collection(req.body.coll_name);
collection.insert(
{name : name, phone: phone}
, function(err, result) {
assert.strictEqual(err, null);
assert.strictEqual(1, result.result.n);
assert.strictEqual(1, result.ops.length);
res.send("Inserted new record into the collection");
});
});
app.post('view_contact', function(req, res){
var db = dbConn.db('gothamDB');
var coll = db.collection(req.body.coll_name);
coll.find({'phone' : req.body.phone}).toArray(function(err, docs){
if(err) {
res.send("Error looking up the data");
return;
}
res.send(docs);
return;
});
});
app.post('delete_contact', function(req, res){
var db = dbConn.db('gothamDB');
var coll = db.collection(req.body.coll_name);
coll.deleteOne({'phone' : req.body.phone}).toArray(function(err, docs){
if(err) {
res.send("Error looking up the data");
return;
}
res.send(docs);
return;
});
});
//const key = path.join(__dirname + '/security/server.key');
//const cert = path.join(__dirname + '/security/server.crt');
const options = {
key: fs.readFileSync(__dirname + '/security/server.key'),
cert: fs.readFileSync(__dirname + '/security/server.crt')
}
http.createServer(app).listen(app.get('port'), function(err){
console.log('Express server lisetning on port ' + app.get('port'));
})
console.log("Server started");
它显示 ERR_INVALID_HTTP_RESPONSE
如果我运行 curl 命令,它会显示以下内容:
NodeExample % curl -X GET 'http://localhost:8080/'
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file
如果我在该行放置一个断点:
res.send("Hello World");
那永远不会命中。我也尝试过
res.header("Content-Type", "application/json");
但由于断点永远不会命中,我猜它不会有帮助。
解决方案
你在这里使用 set
app.set('/', function(req, res){
res.send("Hello World");
res.end();
console.log("Hello World sent");
});
应该得到
app.get('/', function(req, res){
res.send("Hello World");
res.end();
console.log("Hello World sent");
});
推荐阅读
- go - Golang 如何将大的 uint64 转换为浮点数?
- crystal-lang - 在 Crystal 中,如何判断文件是文本文件还是二进制文件?
- r - R - 具有 DoD 变化的分组数据
- java - 数组中最小值的索引;“递归”
- python - pickle:如何在包含的对象上调用 __setstate__
- angular - 使用 Ionic 丢弃所有挂起的 HTTP 请求
- c# - 使用 JObject 创建作为对象数组的对象的语法是什么?
- sql - 每小时的样本限制
- python - Elasticsearch API 未在 URL 中传递 Json 数据集
- mysql - 使用 Docker Compose 在端口 3307 上运行 MySQL