我使用的是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.js
和www
中保留默认代码,则不会出现错误。如果我用我的默认代码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.set
和app.get
在express 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);
});
答案 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模式,否则您无法收听同一端口。
考虑以下内容是firsttest
和secondtest
的内容:
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