2015-06-24 42 views
0

我对路由器的NodeJS一些问题,这是我的代码:需要有关Node.js的路由器

server.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var config = require('./config'); 
var mongoose = require('mongoose'); 

var app = express(); 

mongoose.connect(config.database, function (err){ 
    // body... 
    if(err){ 
     console.log(err); 
    }else{ 
     console.log('database ok') 
    } 
}); 

app.use(bodyParser.urlencoded({ extend: true })); 
app.use(bodyParser.json()); 
app.use(morgan('dev')); 

//call api 
var api = require('./app/routes/api')(app, express); 
api.use('/api', api); 


app.get('/',function(req,res){ 
    res.sendFile(__dirname + '/public/views/index.html') 
}); 


app.listen(config.port, function (err) { 
    // body... 
    if (err) { 
     console.log(err); 
    }else{ 
     console.log('listen in port ' + config.port) 
    } 
}) 

api.js

var User = require('../models/user'); 
var config = require('../../config'); 
var secretKey = config.secretKey; 



module.exports = function(app, express) { 

    var api = express.Router(); 

    api.post('/daftar', function (req, res) { 
     var user = new User({ 
      name: req.body.name, 
      username: req.body.username, 
      password: req.body.password 
     }); 

     user.save(function (err) { 
      if(err){ 
       res.send(err); 
       return; 
      } 

      res.json({ message: 'user telah dibuat'}); 

     }); 

    }); 



    return api; 
} 

我的问题,当我尝试发布使用/ api/daftar url的响应无法找到的东西,但是当我尝试将我的api.post()移动到我的server.js中时,它可以正常工作。我只是将api.post()更改为app.post()

你能告诉我我做错了什么吗?

+0

把'api.js'里面的'api.post()'改成'app.post()',你不需要express作为param也不需要''api = express.Router();' – Hamed

回答

2

可能的解决方法1个

变化api.use('/api', api)app.use('/api', api)

如果不工作,已经包含了我会做以下

可能的解决方式2

从外观上看,您使用的是express 4.x.试试这个。

server.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var config = require('./config'); 
var mongoose = require('mongoose'); 

var app = express(); 

... 

var api = require('./app/routes/api')(app); // Don't need to pass express here 
app.use('/api', api); // Note the app.use instead of api.use 

... 

api.js

var User = require('../models/user'); 
var config = require('../../config'); 
var secretKey = config.secretKey; 

module.exports = function(app) { 

    // Removed express and changed to app.post 
    app.post('/daftar', function (req, res) { 
     var user = new User({ 
      name: req.body.name, 
      username: req.body.username, 
      password: req.body.password 
     }); 

     user.save(function (err) { 
      if (err) { 
       console.log(err); 
       // Set an error status code here 
       res.status(400).send(err); 
      } 

      // I prefer this syntax. More verbose and you can set the HTTP status code 
      // Could put in directly, but I abstracted the msg to a variable here. 
      var msg = { message: 'user telah dibuat' }; 
      // 201 means Created 
      res.status(201).send(msg); 
     }); 

    }); 

    // Do not need to return anything   

} 

这是我很难对此进行测试,但如果你有一些额外的问题,在您的app.post块添加一些console.log()电话确保它被调用。

+0

hey @mgmcdermott thx为您的指南,现在的工作是的,我使用快递4.x. – kodokbuncit