繁体   English   中英

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

[英]need help about node.js router

我对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

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

如果那行不通,我将下面的操作方式包括在内

可能的解决方案2

从外观上看,您正在使用express4.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()调用,以确保它被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM