app.set(&#39; port&#39;,process.env.port || 3000)typeerror对象#<object>没有方法&#39; set&#39; at object。<anonymous> </anonymous> </object>

时间:2014-09-10 10:10:42

标签: node.js express

我使用的是Express 4.2.0和node.js 0.10.12。

奇怪的是我在C\program files\node\nodetest创建了一个项目,当我npm start时,我没有错误。

现在我在C\program files\node\secondtest创建了一个项目,当我npm start时,我得到了 app.set('port' , process.env.port 3000) typeerror object #<object> has no method 'set' at object.<anonymous>及其指向C\program files\node\secondtest\bin\www:5:5

事实是,我不知道如何处理这个错误,因为我不明白这意味着什么。是因为我的项目都在port 3000上听取了吗?

我刚刚开始secondtest,我已成功安装了npm install的依赖项,并将其添加到app.js

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

var app = express();

http.createServer(app).listen(3000, function() {
    console.log('Express app started');
});

app.get('/', function(req, res) {
    res.send('Welcome!');
});

由于

编辑

如果我在app.jswww中保留默认代码,则不会出现错误。如果我用我的默认代码app.js替换,我删除了

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

部分来自www,然后我没有错误。

因为我猜app.setapp.getexpress 4.2.0被删除了?或者因为当我在app.js代码中设置http服务器时,会违反默认的www代码?这些中的任何一个,或者我真的很困惑。

编辑2 这是www

的默认代码
#!/usr/bin/env node
var debug = require('debug')('secondtest');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

1 个答案:

答案 0 :(得分:7)

根据更新的问题更新了答案

由于您正在调用www并且其代码需要设置端口并收听它,因此您的secondtest代码不应该侦听该端口。相反,导出Express app,如下所示:

// ...
module.exports = app;

www将执行聆听部分。

否则,secondtest尝试在不导出Express app时尝试开始侦听端口,www尝试再次侦听变量app一个Express应用程序,因此错误object #<object> has no method 'set'

当您在另一个脚本中执行var app = require('../app');时,重要的是这个../app脚本实际导出Express app

旧答案

执行node app.js而不是使用npm命令。

其次,确保两个进程不同时使用相同的端口。除非您处于cluster模式,否则您无法收听同一端口。

考虑以下内容是firsttestsecondtest的内容:

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

var app = express();

http.createServer(app).listen(process.env.port || 3000, function() {
    console.log('Express app started');
});

app.get('/', function(req, res) {
    res.send('Welcome!');
});

执行以下操作以启动这两个应用:

终端1 :(第一个应用程序将默认为端口3000)。

$ node firsttest/app.js

1号航站楼:

$ export PORT=3001
$ node secondtest/app.js