Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 为什么我的请求正文在邮件上总是空的?_Javascript_Ajax_Node.js_Express_Xmlhttprequest - Fatal编程技术网

Javascript 为什么我的请求正文在邮件上总是空的?

Javascript 为什么我的请求正文在邮件上总是空的?,javascript,ajax,node.js,express,xmlhttprequest,Javascript,Ajax,Node.js,Express,Xmlhttprequest,有许多问题都是相同的,都有答案,但我找到的大多数答案都是围绕着身体解析器的使用,我正在使用身体解析器。我编写了许多基本的API,但从未遇到过这个问题。无论我做什么,由于req.body为空,属性都不会被保存 server.js 'use strict' //basic server setup var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var R

有许多问题都是相同的,都有答案,但我找到的大多数答案都是围绕着身体解析器的使用,我正在使用身体解析器。我编写了许多基本的API,但从未遇到过这个问题。无论我做什么,由于req.body为空,属性都不会被保存

server.js

'use strict'

//basic server setup
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var Routes = require('./routes.js');
var config = require('./config');

// use body parser to parse requests
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));

//connect to db
var mongoose = require('mongoose');
mongoose.Promise = global.Promise; //temp fix for mongoose promise deprecation warning
mongoose.connect(config.url);

//set port to env or 8080
var port = process.env.PORT || 8080;

//setup routes
var router = express.Router();

//use the imported routes
app.use('/', Routes);

//start the server and log
app.listen(port);
console.log('Server listening on %s', port);  
'use strict'

var express = require('express');
var router = express.Router();
var Model = require('./model.js');

var count = 0;

router.use(function(req, res, next) {
    count++;
    console.log('API hit count = %s', count);
    next();
});

// /model post(create new model) get(see all models)
router.route('/model')
.post(function(req,res) {
    var model = new Model();
    model.newKey = req.body.newKey;
    model.newVal = req.body.newVal;

//save the model and checkfor errors
    model.save(function(err) {
        if (err) {
            res.send(err);
        } else {
            res.json({message: "Model created!"});
        }    
    });

})

.get(function(req, res) {
    console.log('made it to GET')
    Model.find(function(err, models) {
        if (err) res.send(err);

        res.json(models);
    })
});

module.exports = router;  
'use strict';

var post = function() {
    var newKey = $('#postKey').val();
    var newVal = $('#postVal').val();
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://localhost:8080/model", true);

    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/json");
    xmlhttp.send({
        newKey: newKey,
        newVal: newVal
    });

    xmlhttp.onreadystatechange = function() {
       if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}

var get = function() {
    console.log('Get Button working')
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "http://localhost:8080/model");
    xmlhttp.send();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}
routes.js

'use strict'

//basic server setup
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var Routes = require('./routes.js');
var config = require('./config');

// use body parser to parse requests
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));

//connect to db
var mongoose = require('mongoose');
mongoose.Promise = global.Promise; //temp fix for mongoose promise deprecation warning
mongoose.connect(config.url);

//set port to env or 8080
var port = process.env.PORT || 8080;

//setup routes
var router = express.Router();

//use the imported routes
app.use('/', Routes);

//start the server and log
app.listen(port);
console.log('Server listening on %s', port);  
'use strict'

var express = require('express');
var router = express.Router();
var Model = require('./model.js');

var count = 0;

router.use(function(req, res, next) {
    count++;
    console.log('API hit count = %s', count);
    next();
});

// /model post(create new model) get(see all models)
router.route('/model')
.post(function(req,res) {
    var model = new Model();
    model.newKey = req.body.newKey;
    model.newVal = req.body.newVal;

//save the model and checkfor errors
    model.save(function(err) {
        if (err) {
            res.send(err);
        } else {
            res.json({message: "Model created!"});
        }    
    });

})

.get(function(req, res) {
    console.log('made it to GET')
    Model.find(function(err, models) {
        if (err) res.send(err);

        res.json(models);
    })
});

module.exports = router;  
'use strict';

var post = function() {
    var newKey = $('#postKey').val();
    var newVal = $('#postVal').val();
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://localhost:8080/model", true);

    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/json");
    xmlhttp.send({
        newKey: newKey,
        newVal: newVal
    });

    xmlhttp.onreadystatechange = function() {
       if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}

var get = function() {
    console.log('Get Button working')
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "http://localhost:8080/model");
    xmlhttp.send();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}
app.js

'use strict'

//basic server setup
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var Routes = require('./routes.js');
var config = require('./config');

// use body parser to parse requests
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));

//connect to db
var mongoose = require('mongoose');
mongoose.Promise = global.Promise; //temp fix for mongoose promise deprecation warning
mongoose.connect(config.url);

//set port to env or 8080
var port = process.env.PORT || 8080;

//setup routes
var router = express.Router();

//use the imported routes
app.use('/', Routes);

//start the server and log
app.listen(port);
console.log('Server listening on %s', port);  
'use strict'

var express = require('express');
var router = express.Router();
var Model = require('./model.js');

var count = 0;

router.use(function(req, res, next) {
    count++;
    console.log('API hit count = %s', count);
    next();
});

// /model post(create new model) get(see all models)
router.route('/model')
.post(function(req,res) {
    var model = new Model();
    model.newKey = req.body.newKey;
    model.newVal = req.body.newVal;

//save the model and checkfor errors
    model.save(function(err) {
        if (err) {
            res.send(err);
        } else {
            res.json({message: "Model created!"});
        }    
    });

})

.get(function(req, res) {
    console.log('made it to GET')
    Model.find(function(err, models) {
        if (err) res.send(err);

        res.json(models);
    })
});

module.exports = router;  
'use strict';

var post = function() {
    var newKey = $('#postKey').val();
    var newVal = $('#postVal').val();
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://localhost:8080/model", true);

    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/json");
    xmlhttp.send({
        newKey: newKey,
        newVal: newVal
    });

    xmlhttp.onreadystatechange = function() {
       if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}

var get = function() {
    console.log('Get Button working')
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "http://localhost:8080/model");
    xmlhttp.send();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}
如果你设定你的

xmlhttp.setRequestHeader("Content-type", "application/json"); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
那么你需要使用

JSON.stringify(...your object ...) 
正如@JaromandaX所说。 如果你设定你的

xmlhttp.setRequestHeader("Content-type", "application/json"); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

然后您需要通过
object.serialize()对
对象进行
序列化

如果设置
xmlhttp.setRequestHeader(“内容类型”,“应用程序/JSON”),我相信您需要
.send(JSON.stringify(…您的对象…)
然后您需要使用
JSON.stringify(…您的对象…)
正如@JaromandaX所说。如果您设置
xmlhttp.setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”)对象进行
序列化
。绝对是令人沮丧的奇妙。谢谢你们两位。阿图尔,还有一个问题。查看我的GET请求。我想传入一个值来搜索数据库。例如,我想发送参数getKey,它将是通过角度前端输入的键名。我尝试添加url+“?value=value”等,但没有成功。您在服务器端收到数据了吗?那你打印了吗?那么完整的url是什么?我没有从服务器端获取数据。基本上,如果我尝试跟随这个例子:我什么也得不到。我的url应该是var get=function(){var getKey=$('#getKey').val();var xmlhttp=new XMLHttpRequest();xmlhttp.open(“get”,“+getKey”);xmlhttp.setRequestHeader(“Content type”,“application/json”);xmlhttp.send()}你能检查一下
var key=req.param('newKey');控制台日志(键)显示该值,我根据此修复了问题。不过我以前从来没有这样做过。我错过什么了吗?