首页 > 解决方案 > 示例 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");

有什么线索吗?浏览器显示如下: (失败)net::ERR_INVALID_HTTP_RESPONSE

它显示 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");

但由于断点永远不会命中,我猜它不会有帮助。

标签: node.jsexpressgoogle-chromecurl

解决方案


你在这里使用 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");
});

推荐阅读