在节点js中使用express模块​​时出错

时间:2014-06-18 10:19:14

标签: node.js express npm

我是node.js的新手。我使用以下代码。我已安装快速模块,已安装相关文件。

var express = require('express')
var app = express.createServer()
app.listen(8000)

var tweets = []

app.get('/', function(req, res) {
  res.send('Welcome to Node Twitter')
})

app.post('/send', express.bodyParser(), function(req, res) {
  if (req.body && req.body.tweet) {
    tweets.push(req.body.tweet)
    res.send({status:"ok", message:"Tweet received"})
  } else {
    //no tweet?
    res.send({status:"nok", message:"No tweet received"})
  }
})

app.get('/tweets', function(req,res) {
  res.send(tweets)
})

我收到以下错误。

 var app = function(req, res, next) {
   app.handle(req, res, next);
 };

 mixin(app, proto);
 mixin(app, EventEmitter.prototype);

 app.request = { __proto__: req, app: app };
 app.response = { __proto__: res, app: app };
 app.init();
 return app;
 has no method 'createServer'
   at Object.<anonymous> (D:\ProgramFiles\Nodejs\node_modules\twitter.js:3:19)
   at Module._compile (module.js:456:26)
   at Object.Module._extensions..js (module.js:474:10)
   at Module.load (module.js:356:32)
   at Function.Module._load (module.js:312:12)
   at Function.Module.runMain (module.js:497:10)
   at startup (node.js:119:16)
   at node.js:906:3

当我将文件放在modules文件夹之外时会发生这种情况。当我把它放在其他地方时,它也找不到该模块并返回以下错误。

module.js:340
    throw err;
          ^
Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (D:\NodeApp\twitter.js:1:77)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

假设在评论中建议使用@JoakimM的新版Express,您可能希望:

  1. 更新var app = express()声明以使用新语法
  2. npm install body-parser --save获取Express 4.0不再附带的新的身体解析器中间件(参见:migrating from 3.x to 4.x docs)
  3. 添加声明以要求新的中间件
  4. 添加app.use以便express知道新的中间件
  5. express.bodyparser路径
  6. 中删除app.post('/send'参数
  7. app.listen移至底部。也许这就是迷信......但是我把它放在那里。
  8. 我知道这是一个火焰战争的理由,但分号是你的朋友:) :):)
  9. 以上结果,在我的系统上工作:

    var express = require('express')
    var bodyParser = require('body-parser')
    var app = express()
    
    var tweets = []
    
    app.use(bodyParser())
    
    app.get('/', function(req, res) {
      res.send('Welcome to Node Twitter')
    })
    
    app.post('/send', function(req, res) {
      if (req.body && req.body.tweet) {
        tweets.push(req.body.tweet)
        res.send({status:"ok", message:"Tweet received"})
      } else {
        //no tweet?
        res.send({status:"nok", message:"No tweet received"})
      }
    })
    
    app.get('/tweets', function(req,res) {
      res.send(tweets)
    })
    
    app.listen(8000)