【问题标题】:Unhandled promise Rejection (rejection id: 1) - Node.js未处理的承诺拒绝(拒绝 id:1)-Node.js
【发布时间】:2018-01-18 16:01:24
【问题描述】:

我是 Node.js 的新手,正在尝试解决一些问题。 我在 Node.js 服务器上为一个在 MongoDB 上写入用户信息的 Android 应用程序定义了一个注册函数。

server.js

var express = require('express'),
  app = express(),
  port = process.env.PORT || 3000,
  mongoose = require('mongoose'),
  Task = require('./api/models/serverModel'),
  bodyParser = require('body-parser');

var url = "mongodb://localhost:27017/ProjectDB";
mongoose.Promise = global.Promise;
mongoose.connect(url); 

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var routes = require('./api/routes/serverRoute');
routes(app);

app.listen(port);
console.log('Project RESTful API server started on: ' + port);

服务器模型

var UserSchema = new mongoose.Schema({
    userName: {type: String, unique: true, required: true},
    email: {type: String, unique: true, required: true},
    password: {type: String, required: true},
    createdAt: {type: String, required: true}
});
var User = mongoose.model('User', UserSchema);

module.exports = 用户;

服务器路由

module.exports = function(app) {
  var Project = require('../controllers/serverController');

  // Project Routes
    app.route('/signup')
        .post(Project.signup);
};

服务器控制器

...
mongoose.Promise = global.Promise;
exports.signup = function(req, res)  {

return new Promise( function(resolve,reject) {

    var user = new User({
       userName: req.body.name,
       password: req.body.pass,
       mail: req.body.email,
       createdAt : new Date()
    });

user.save()
    .then(function() { resolve({ status: 201, message: 'User Registered Successfully !' })})
    .catch(function(err) {
        if (err.code == 11000) {
            reject({ status: 409, message: 'User Already Registered !' });
        } else {
            reject({ status: 500, message: 'Internal Server Error !' });
        }
    });

})};

...

它编译没有任何错误。 当我尝试像这样通过 Postman 发送 JSON 时:

{
  "userName" : "username",
  "email" : "user.name@gmail.com",
  "password" : "blabla1"
}

它报告

UnhandledPromiseRejectionWarning: 未处理的promise Rejection (rejection id: 1) [object Object]

我已经阅读了大量的帖子,但我无法摆脱这一点。 有什么帮助吗? 谢谢。

【问题讨论】:

  • 分享你使用注册功能的代码。
  • @mehta-rohan 我只需添加路线
  • @mehta-rohan 和邮递员的电话 (POST - localhost:3000/signup)
  • 不看是无法解决的。你的注册函数返回一个承诺,我必须在另一端处理,仔细查看或分享。
  • 所以这是罪魁祸首- // 项目路线 app.route('/signup') .post(Project.signup);您的 Project.signup 返回一个未处理的承诺。您需要在此处进行更改

标签: node.js controller promise postman


【解决方案1】:

试试这个并恢复。

server.js

var express = require('express'),
app = express(),
port = process.env.PORT || 3000,
mongoose = require('mongoose'),
Task = require('./api/models/serverModel'),
bodyParser = require('body-parser');

var url = "mongodb://localhost:27017/ProjectDB";
mongoose.Promise = global.Promise;
mongoose.connect(url); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json());

var routes = require('./api/routes/serverRoute');
//change 
//routes(app);
app.use('/',routes);

app.listen(port);
console.log('Project RESTful API server started on: ' + port);

服务器路由

var express = require('express');
var router = express.Router();

// GET home page. 
router.post('/signup', function(req, res, next) {
    var Project = require('../controllers/serverController');
    Project.signup().then(function(result){
    res.send(result);
  }).catch(function(err){
      res.send(err);
  });
});

module.exports = router;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多