节点js express在路由移入自己的文件夹后无法解析主体

时间:2016-10-08 15:56:38

标签: json node.js express

现在将路由移动到自己的文件夹中我无法解析响应正文。控制器正确发送正文。当路由在服务器js文件中时,应用程序正常工作。

Server.js BEFORE

var express = require('express');
var app = express();
var routes = require('./routes/routes.js');

app.use('/',routes);
app.use(express.static(__dirname + '/public')); 
app.use('/bootstrap', express.static(__dirname + '/public/bower_components/bootstrap/dist'));
app.use('/jquery', express.static(__dirname + '/public/bower_components/jquery/dist'));
app.use('/angular', express.static(__dirname + '/public/bower_components/angular'));
app.use('/controllers', express.static(__dirname + '/public/controllers'));

Routes.js

var express = require('express');
var app = express();

var bodyParser = require('body-parser');
var ObjectId = require('mongojs').ObjectID;
var mongojs = require('mongojs');
var db = mongojs('contactlist',['contactlist'])
var router = express.Router();
app.use(bodyParser.json());

router.put('/contactlist/:id',function(req,res){
    console.log("req.body.name");//gives undefined
    db.contactlist.findAndModify({
        query:{_id: ObjectId(req.params.id)},
        update:{ $set:{name:req.body.name,email:req.body.email,number:req.body.number}},
        new: true}, 
        function(err,doc){
            res.json(doc);
        });
});


module.exports = router;

另外,有什么想法为什么我必须在这里附加routes.js而不仅仅是/ routes?

var routes = require('./routes/routes.js');

文件夹结构

-App
    node_mods/
    public/
        index.html
        controllers/
        resources/
    routes/
        routes.js

Server.js AFTER

var express = require('express');
var app = express();

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
 extended: true
}));

var routes = require('./routes/routes.js');

app.use('/',routes);
app.use(express.static(__dirname + '/public')); //look for static files js html css etc
app.use('/bootstrap', express.static(__dirname + '/public/bower_components/bootstrap/dist'));
app.use('/jquery', express.static(__dirname + '/public/bower_components/jquery/dist'));
app.use('/angular', express.static(__dirname + '/public/bower_components/angular'));
app.use('/controllers', express.static(__dirname + '/public/controllers'));

app.listen(3000);
console.log('server running on port 3000');

2 个答案:

答案 0 :(得分:0)

在你的路线被召唤之后你的身体正在解析。

一般在主服务器文件中传递body-parser代码,在所有路由之前都是server.js

像这样:

var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));

答案 1 :(得分:0)

至于你的(第二个?)队列,关于导入需要routes.js:

当你这样做时

var routes = require('./routes/routes.js');

你没有打电话给路线。你实际上需要一个模块。这不仅是路由数据,还包括路由器对象Behavior,包括所有路由的相关中间件。

如果仔细观察,你的router.js会导出路由器" object" (或功能,根据需要调用)。因此,当您需要它时,您将获得整个包,而不仅仅是数据