带有“请求”模块的POST请求无法正常工作

时间:2018-10-27 08:29:06

标签: javascript node.js post request

我正在尝试使用request模块向我的API发送POST请求,但是我什么也没收到,当我控制台记录请求数据时,我看到字段未定义,如下图所示。不知道为什么。 enter image description here

我试图解决问题,但没有成功。我不知道怎么了但是,当我尝试通过POSTMAN将数据发送到相同的API时,效果很好,如下图所示。所以我不知道为什么从我的应用程序前端发送数据时它不起作用 enter image description here

我需要帮助来说明这一点。

这是我的服务器端代码

let express = require('express'),
	bodyParser = require('body-parser'),
	request = require('request'),
	//connect = require('connect'),
	jobRoutes = require('./routes/jobs'), //ddd
	// db 		= require('./models/app'), //ddd
	// helpers = require('./helpers/jobs'),
	
	
	// fetch = require("node-fetch"),
	path = require('path'),
	router 	= express.Router(),
	app = express(),
	port = process.env.PORT || 3000;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static('public'));
app.use(express.static(path.join(__dirname + '/public')));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');	


app.use('/api/jobs', jobRoutes);

app.post('/jobs', (req, res)=>{
		let formBody = {
	        title: req.title,
			category: req.body.category,
			description: req.body.description,
			type: req.body.type,
			url: req.body.url,
			email: req.body.email,
			apply: req.body.apply,
			location: req.body.location,
			company: req.body.company,       
	       	createdAt: Date.now()
	            };
		request.post(console.log(formBody),{url:'http://localhost:3000/api/jobs/',	form: formBody
		
		 }, function optionalCallback(err, httpResponse, body) {
		  if (err) {
		    return console.error('upload failed:', err);
		  }else{
		  	console.log('Upload successful!  Server responded with:', body);
			}
			return res.redirect('/jobs')
		});
	})
  
 app.listen(port, process.env.PORT, process.env.IP, ()=> console.log(`Server is running on ${port}`))

这是接收端服务器代码的样子

let db = require ('../models/app');

exports.createJob = (req, res) => {
	console.log('The req body:',req.body)
	db.Job.create(req.body)
	.then((newJob) => {
		res.status(201).json(newJob)
	})
	.catch((err) => {
		res.send(err)
	})

}

您可以签出当前的repo以获得更多的清晰度

1 个答案:

答案 0 :(得分:1)

  

但是当我尝试通过POSTMAN将数据发送到相同的API时,如下图所示,它工作正常。

该图像显示来自Postman的请求的Content-Type将为application/json,但是使用request模块的代码将发送一个Content-Type为application/x-www-form-urlencoded的邮件。

大概(您的“接收端服务器代码”未显示bodyParser),您的服务器仅支持JSON格式的请求。

将服务器配置为支持application/x-www-form-urlencoded或使请求发送JSON。