Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript express 4.0正文分析器对路由处理程序不可见_Javascript_Node.js_Express - Fatal编程技术网

Javascript express 4.0正文分析器对路由处理程序不可见

Javascript express 4.0正文分析器对路由处理程序不可见,javascript,node.js,express,Javascript,Node.js,Express,我试图通过谷歌邮递员发布如下信息 PUT /updateUser/bbb@sss.com HTTP/1.1 Host: localhost:8081 Content-Type: application/json Cache-Control: no-cache Postman-Token: 3f1e9857-302a-f4cf-4c24-d3222b4bc292 {"email":"bbb@sss.com", "pass":"kkk"} 调试时,req.body未定义。这是我的密码 serve

我试图通过谷歌邮递员发布如下信息

PUT /updateUser/bbb@sss.com HTTP/1.1
Host: localhost:8081
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 3f1e9857-302a-f4cf-4c24-d3222b4bc292

{"email":"bbb@sss.com", "pass":"kkk"}
调试时,req.body未定义。这是我的密码 server.js

var express = require('express')
    , app = express()
    , mongoose = require('mongoose')
    , models = require('./models')
    , bodyParser = require('body-parser')
    , routes = require('./controllers')
    , user = require('./controllers/users.js')
    , port = 8081 //process.env.PORT || 3000

app.use(express.static(__dirname + '/public'));
app.use('/', routes);
app.use('/', user);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

module.exports = app;
mongoose.set('debug', true);
mongoose.connect('mongodb://localhost/m101JS', function (err) {
    if (err) throw err;
    console.log("mongoose connected")
    //routes(app);
    var server = app.listen(port, function () {
        var host = server.address().address
        var port = server.address().port
        console.log("RESTful Web Services listening at http://%s:%s", host, port)
    })
})
//....
routes(app);
users.js

var express = require('express')
    , router = express.Router()
    , mongoose = require('mongoose')
    , User = mongoose.model('User')
    , crypto = require('crypto')
    , cleanString = require('../helpers/cleanString')
    , hash = require('../helpers/hash');
// ......    
// Update user
router.put('/updateUser/:id', function (req, res, next) {
    var email = cleanString(req.body.email);
    var pass = cleanString(req.body.pass);
    if (!(email && pass)) {
        return invalid(email);
    }

    crypto.randomBytes(16, function (err, bytes) {
        if (err) return next(err);

        var user = { _id: email };
        user.salt = bytes.toString('utf8');
        user.hash = hash(pass, user.salt);

        User.findByIdAndUpdate(req.params.id, user, function (err, post) {
            if (err) return next(err);
            res.json("updated:" + post);
        });
    });
});
module.exports = router;
它过去在不使用路由器类(如 旧服务器.js

var express = require('express')
    , app = express()
    , mongoose = require('mongoose')
    , models = require('./models')
    , bodyParser = require('body-parser')
    , routes = require('./controllers')
    , user = require('./controllers/users.js')
    , port = 8081 //process.env.PORT || 3000

app.use(express.static(__dirname + '/public'));
app.use('/', routes);
app.use('/', user);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

module.exports = app;
mongoose.set('debug', true);
mongoose.connect('mongodb://localhost/m101JS', function (err) {
    if (err) throw err;
    console.log("mongoose connected")
    //routes(app);
    var server = app.listen(port, function () {
        var host = server.address().address
        var port = server.address().port
        console.log("RESTful Web Services listening at http://%s:%s", host, port)
    })
})
//....
routes(app);
老用户.js

module.exports = function (app) {
    app.put('/updateUser/:id', function (req, res, next) {
    .....
}
那么,如何修复当前代码以使主体解析器对users.js可见呢?我的意思是不必在每个文件中都要求它


谢谢,

在express js中,配置中间件的顺序很重要。在配置中,首先指定路由器映射,然后是主体解析器中间件。您需要做的就是首先配置主体解析器,然后配置路由器映射

对于exp:

  app.use(bodyParser.urlencoded({ extended: true }));
  app.use(bodyParser.json());
  app.use(express.static(__dirname + '/public'));
  app.use('/', routes);
  app.use('/', user);

在express js中,配置中间件的顺序很重要。在配置中,首先指定路由器映射,然后是主体解析器中间件。您需要做的就是首先配置主体解析器,然后配置路由器映射

对于exp:

  app.use(bodyParser.urlencoded({ extended: true }));
  app.use(bodyParser.json());
  app.use(express.static(__dirname + '/public'));
  app.use('/', routes);
  app.use('/', user);

谢谢你,娜拉,这很有效。非常感谢你的帮助。谢谢你,娜拉,这非常有效。非常感谢你的帮助。