app.set('port',port)'TypeError:undefined不是函数'。 初学者,需要创意

我是一个业余的学习与node.js构build。 我一直在遵循一个教程来创build我的第一个node.js应用程序。 它完美的工作,直到我进入“npm开始”。 日志是:

C:\node\nodeteest3\bin\www:16 TypeError: undefined is not a function at Object.<anonymous> M+<C;\node\nodetest3\bin\www:16:5 at Module_compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.module.runMain (module.js:501:10) at startup(node.js:129:16) at node.js:814:3 

然后输出大约20行,以“npm ERR!”+文件path开始,我认为这是不必要的,因为错误似乎在bin文件中。 这是代码

 #!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('nodetest3:server'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); 

这是错误指向的地方:

 [app.set('port', port);] 

——- ^'s'的错误指针,

 app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); /** * Normalize a port into a number, string, or false. */ function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { // named pipe return val; } if (port >= 0) { // port number return port; } return false; } /** * Event listener for HTTP server "error" event. */ function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } /** * Event listener for HTTP server "listening" event. */ function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind); } Like I said in the beginning, I'm a complete beginner with command-line/github, but I'm already in love with it. I try to practice it every night after I finish my homework, and am getting really frustrated about getting stuck because I haven't been able to move forward for four days now. Also, I'm running this on node.js and the OS is Windows 8. Anything helps! Let me know if you want me to post any of the other code; I omitted so as to not add more than necessary. "../app (app.js file) JUST ADDED"*************************** ../app file: [ App.js ] var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); /// catch 404 and forwarding to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); var app = express(); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json({estended: true})); app.use(bodyParser.urlencoded({extended: true})); app.use(cookieParser({extended:true})); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); 

您不会导出app.js文件中的任何内容。 在app.js文件的末尾,包含以下行。

 module.exports = app; 

看看你的问题是否消失。

还有一个补充:你有var app = express(); 两次在你的app.js

您没有在app.js文件中声明任何称为set函数。 创build这个函数并像这样导出它:

 exports.set = function(...) { ... }; 

如果这个app是快速的app哟指定一个像这样的端口:

 var express = require('express'), http = require('http'); var app = express(); http.createServer(app).listen(port); 

代替

 app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); 

这是因为该端口是http服务器的属性,而不是快速应用程序的属性

你也可以用

 var express = require('express'), app = express(); app.listen(port); 

在你的app.js的底部:

 app.set('port', process.env.PORT || 26398); //<--- replace with your port number // Server var server = http.createServer(app); server.listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); module.exports = app; 

在我的情况下,我只是在函数被调用之前移动了normalizePort函数。 这是咖啡的脚本,但我已经把它转换为JavaScript在这里。

 normalizePort = function(val) { var port; var port; port = parseInt(val, 10); if (isNaN(port)) { return val; } if (port >= 0) { return port; } return false; }; port = normalizePort(process.env.PORT || '4000');