NodeJS - 控制器没有返回JSON到Route。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeJS - 控制器没有返回JSON到Route。相关的知识,希望对你有一定的参考价值。
所以我创建了一个Controller来创建一个用户配置文件,一切都很好,它在数据库中创建了它,但是我不能在响应中得到任何东西......起初我以为是我的Route的问题,但是经过一些测试,在Controller的方法中早期添加了一个测试响应,它的返回很好。我不知道我错过了什么,因为就像我说的,它进入DB的罚款。
下面是我的Controller.js
module.exports = function(req, res) {
var mod = {
createMerchantUser(req, res) {
var merchantDescription = 'Merchant for ' + req.body.email;
////////// If I add a test Response HERE it returns perfectly
///////// return{ message: "Testing response here..." }
// ANYTHING BELOW GETS CREATED IN DATABASE BUT DOESN'T PROVIDE A RESPONSE
var merchant = stripe.customers.create({
email: req.body.email,
description: merchantDescription
}, function(err, customer) {
var new_merchant_user = new MerchantUser({
email: req.body.email,
password: req.body.password,
accountConfirmed: false,
stripeID: customer.id
});
new_merchant_user.save(function(err, merchantUser) {
if (err) {
if (err.name === 'MongoError' && err.code === 11000) {
// Duplicate username
return res.status(500).send({ success: false, message: 'An account with this email already exists!' });
}
}
res.json({
data: {
merchantUser
}
});
});
});
}
}
return mod;
};
这里是我的Route.js
app.post('/api/createMerchUser', (req, res) => {
return res.json(merchantUsersController.createMerchantUser(req, res))
})
更新。
只是为了更多的背景, 下面是不同的方式,我用来做它,这将完美的工作。它在创建对象后返回对象。这样做的问题是我不能在不同的控制器中调用方法,因此我不得不使用上面的方法...
控制器.js
exports.create_merchant_user = function(req, res) {
var merchantDescription = 'Merchant for ' + req.body.email;
var merchant = stripe.customers.create({
email: req.body.email,
description: merchantDescription
}, function(err, customer) {
var new_merchant_user = new MerchantUser({
email: req.body.email,
password: req.body.password,
accountConfirmed: false,
stripeID: customer.id
});
new_merchant_user.save(function(err, merchantUser) {
if (err) {
if (err.name === 'MongoError' && err.code === 11000) {
// Duplicate username
return res.status(500).send({ success: false, message: 'An account with this email already exists!' });
}
}
res.json({
data: {
merchantUser
}
});
});
});
};
Route.js
app.route('/api/merchantUser')
.post(merchantUsers.create_merchant_user);
答案
尝试添加一个 else 块
if (err) {
if (err.name === 'MongoError' && err.code === 11000) {
// Duplicate username
return res.status(500).send({ success: false, message: 'An account with this email already exists!' });
}
} else {
return res.json({
data: {
merchantUser
}
}
另一答案
试试下面的代码。
return res.status(200).type('application/json').send({
"statusCode": 200,
"statusMsg": "success,
"data": merchantUser
});
另一答案
你是否收到304状态码?
如果是,那么
304 Not Modified 响应代码表示自上次传输后,请求的资源没有被修改。这通常意味着不需要将请求的资源重新传输给客户端,可以使用缓存的版本来代替。
试着在进行get请求的同时修改数据,然后看看响应时是否有数据。
另一答案
你没有将数据返回到控制器中的路由。return
关键字:
return res.json({
data: {
new_merchant_user
}
});
以上是关于NodeJS - 控制器没有返回JSON到Route。的主要内容,如果未能解决你的问题,请参考以下文章
使用 Angularjs 和 Nodejs 从 HTML 表单另存为 JSON 文件
Shiro Ajax请求没有权限返回JSON,没有登录返回JSON