node js TypeError:无法读取属性' get'未定义使用cloud9 IDE

时间:2016-12-24 03:55:19

标签: node.js express cloud9-ide cloud9

我正在使用cloud9 ide并收到错误,如标题中所述。 文件结构如下所示

client/
  views/
   -index.ejs
   routes/
    -index.js
-server.js 

server.js文件

var path = require('path');
var async = require('async');
var express = require('express');
var router = express();
var server = http.createServer(router);

router.use(express.static(path.resolve(__dirname, 'client')));


router.set('view engine','ejs');
//app.set('views','app/views');
router.locals.siteTitle = "Meetups";

//router.use(express.static(path.resolve('./public')));
router.use(require('./client/routes/index'));
router.use(require('./client/routes/speaker'));
 server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function(){
  var addr = server.address();
  console.log("Chat server listening at", addr.address + ":" + addr.port);
});

虽然我的index.js在接收错误的routes文件夹中

  

TypeError:无法读取属性' get'未定义的router.get(' /',function(req,res){

 var express = require('express');
var router = express.Router();
  router.get('/',function(req,res){
  res.render('index',{
    pageTitle:'Home',
    pageID:'home',
  });
});

module.exports = router;

1 个答案:

答案 0 :(得分:0)

我已将您的代码复制到我的c9 ide。

server.js中的第一个问题,您需要要求http模块。

var http = require("http");

我已删除此行,因为您没有共享此文件。

router.use(require('./client/routes/speaker'));

有效。至少,Node没有抛出任何错误。

聊天服务器在0.0.0.0:8080收听

但我有一些建议。

  • 首先,在server.js中,请将“router”变量重命名为“app”,因为它不是路由模块。
  • 对于公用文件夹,请勿使用客户端文件夹,创建名为“public”的文件夹。因为客户端文件夹中有路由,视图等。
  • 对于require表达式,请尝试将其置于文件的顶部。
var routes = require('./client/routes');

// some code ...

app.use('/', routes);
  • 并且只导入一个路径文件。在routes / index.js中导入其他路由文件

  • 我更喜欢在server.listen

  • 之前的createServer
var server = http.createServer(app);
server.listen(...)