1

私はnodejsを学ぼうとしている初心者です。私のアプリはファイルを投稿、配置、アップロードする必要があります。BodyParser を使用してファイルをアップロードできないことがわかりました。

BodyParser (アプリ レベルで追加) だけを使用する前は、POST と PUT WORKED でした。(もちろん、アップロードはしませんでした)

この記事を見つけました [ busboy を使用した Express アプリの bodyParser() から移行しますか?

それでは、記事に従ってみてください。POST と PUT を機能させてから、アップロードに移ろうとしています。PUT と POST の両方でエラーは発生しませんが、req.body は {} です

私のserver.jsには

mongoose.connection.on("connected", function(ref) {
    console.log("Connected to DB!");

    var app = express();

    port = process.env.port || 3000;
    ip = process.env.ip;

    var router = express.Router();
    router.use(function(req, res, next) {
        next(); 
    });

    app.use('/api', router);

    require('./app/routes')(router);


    app.listen(port, ip, function() {
        console.log('listening on port ' + port);
    });
});

私のrouter.jsにはあります(混乱を取り除きます)

var ImageModel = require('./models/image.js')
    ,common = require('./common.js')
    ,bodyParser = require('body-parser')
    ,busboy = require('connect-busboy')
; 

module.exports = function(router) {

router.put('/pict/:id',
    bodyParser.urlencoded({ extended: true }),
    function (req, res) {
    console.log("--> %j", req.body);
    ImageModel.findByIdAndUpdate(req.params.id, req.body, function (err, user) {
        if (err) throw err;

        ImageModel.findById(req.params.id, function (err, pict) {
            if (err) res.send(err);
            res.json(pict);
        });

    });
});

router.post('/pict',
    bodyParser.urlencoded({ extended: true }),
    function (req, res) {
    console.log("--> %j", req.body);
    var pict = new ImageModel(req.body);
    pict.save(function (err) {
        if (err) throw err;
        res.json(pict);
    });
});

解決

router.put('/pict/:id',
    bodyParser.urlencoded({ extended: true }), bodyParser.json(),
    function (req, res) {
    console.log("--> %j", req.body);
    ImageModel.findByIdAndUpdate(req.params.id, req.body, function (err, user) {
        if (err) throw err;

        ImageModel.findById(req.params.id, function (err, pict) {
            if (err) res.send(err);
            res.json(pict);
        });

    });
});

router.post('/pict',
    bodyParser.urlencoded({ extended: true }), bodyParser.json(),
    function (req, res) {
    console.log("--> %j", req.body);
    var pict = new ImageModel(req.body);
    pict.save(function (err) {
        if (err) throw err;
        res.json(pict);
    });
});
4

1 に答える 1

0

問題は、bodyParser.json() が欠落していたことです。機能したコードで説明を更新しました

于 2015-09-02T22:11:57.647 に答える