需要有关node.js路由器的帮助

时间:2015-06-24 14:50:39

标签: javascript node.js express

我对nodejs路由器有一些疑问,这是我的代码:

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()

你能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:2)

可能的解决方案1 ​​

api.use('/api', api)更改为app.use('/api', api)

如果这不起作用,我已经包含了我在下面的方式

可能的解决方案2

从外观上看,你使用的是快递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        

}

我很难对此进行测试,但如果您遇到其他一些问题,请在console.log()块中添加一些app.post来电,以确保其被调用。