【问题标题】:why is createServer() considered not a function?为什么 createServer() 被认为不是函数?
【发布时间】:2016-04-22 04:10:39
【问题描述】:

我全局安装了 express,npm 安装了我的 express 应用程序,但智能或应用程序都没有工作(我在 mac OS Yosemite 上使用 Visual Studio 代码)。

这是一个示例代码:

/// <reference path="typings/node/node.d.ts" />
/// <reference path="typings/express/express.d.ts" />

var express = require('express');
var app = express.createServer();
app.get('/', function (req, res) {
    res.send('hi');
})

app.listen(8000);

这是我得到的错误:

Abeds-MacBook-Pro:myNode AZ$ node twitter.js 
/Users/AZ/Desktop/myNode/twitter.js:5
var app = express.createServer();
                  ^

TypeError: express.createServer is not a function
    at Object.<anonymous> (/Users/AZ/Desktop/myNode/twitter.js:5:19)
    at Module._compile (module.js:397:26)
    at Object.Module._extensions..js (module.js:404:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:429:10)
    at startup (node.js:139:18)
    at node.js:999:3

我研究了一下,发现 createServer() 已被弃用。我读到我需要在我的应用程序的某个地方更改版本。

注意:我使用纯 Node.js 做了另一个应用程序,并且 createServer() 与智能一起工作时没有任何错误。

编辑: 在我的其他应用程序中,我使用了require('net')

我将代码修改为以下内容:

var express = require('express')
  , http = require('http');

    var app = express(); 
    var server = http.createServer(app);
    console.log('Listening on port 8000')
    app.get('/', function (req, res) {
        res.send('hi');
    })

    app.listen(8000)

我现在遇到的问题是res.send('hi');还没有到达,也就是我无法发送给客户端。

编辑 2:

我尝试了其中一个答案中提供的以下代码:

const express = require('express');
const http = require('http');

const app = express();
const server = http.createServer(app).listen(8080, function(err) {
  if (err) {
    console.log(err);
  } else {
    const host = server.address().address;
    const port = server.address().port;
    console.log(`Server listening on ${host}:${port}`);
  }
});
app.get('/', function (req, res) {
    res.send('hi');
})

res.send('hi'); 仍然不起作用,也没有提供错误。

【问题讨论】:

  • 不确定是否有帮助,但我总是使用var app = express() 而不是var app = express.createServer()
  • @JoachimIsaksson 这会创建服务器吗?
  • 总是将其视为创建应用程序,但是是的,它创建了一个对象,您可以像您正在做的那样调用get。只需替换该行即可运行您的示例代码。
  • @kyrylkov 我试过答案,检查编辑。

标签: javascript node.js express visual-studio-code


【解决方案1】:

createServerhttp 的函数,所以它应该是:

const express = require('express');
const http = require('http');

const app = express();
app.get('/', function (req, res) {
  res.send('hi');
});

const server = http.createServer(app).listen(8080, function(err) {
  if (err) {
    console.log(err);
  } else {
    const host = server.address().address;
    const port = server.address().port;
    console.log(`Server listening on ${host}:${port}`);
  }
});

附:全局安装express 是个坏主意

【讨论】:

  • 好的,所以错误消失了,但我无法向客户端发送任何内容。 res.send('hi');尚未到达
  • 服务器监听什么端口?您将客户端指向哪个端口?
  • 我在你的例子中修复了端口,服务器应该已经启动但我仍然无法发送
  • http.createServer(app)之前还有app.get('/', function (req, res) { res.send('hi'); })吗?
  • 检查编辑,我根据您的回答发布了编辑后的代码
猜你喜欢
  • 2020-06-09
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2014-11-27
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多