Node.js 如何从节点应用程序返回错误,以便$post.fail()捕获这些错误
我有一个简单的聊天应用程序。在index.html中,我有一个带有id为“nick”的输入的表单。当我提交此表单时,如果聊天室中还没有此用户,我希望创建一个用户。如果用户确实存在(或者存在其他错误),我希望能够显示一条有用的错误消息 在这里,我列出了实现这一点的3段代码 我想使用$post.fail()处理index.html中用户创建过程中的任何错误。我该怎么做?目前,如果用户已经存在,Express会在“抛出新错误('user ready exists');”行上抛出以下异常: “未处理的拒绝错误:用户已存在于c:\Users\Matt\Documents\code\chat\app\routes\room.js:24:19” 这是否意味着我应该在某个地方调用Promise.reject()?是否有返回错误的标准方法,以便$post.fail()捕获错误 index.htmlNode.js 如何从节点应用程序返回错误,以便$post.fail()捕获这些错误,node.js,express,bluebird,Node.js,Express,Bluebird,我有一个简单的聊天应用程序。在index.html中,我有一个带有id为“nick”的输入的表单。当我提交此表单时,如果聊天室中还没有此用户,我希望创建一个用户。如果用户确实存在(或者存在其他错误),我希望能够显示一条有用的错误消息 在这里,我列出了实现这一点的3段代码 我想使用$post.fail()处理index.html中用户创建过程中的任何错误。我该怎么做?目前,如果用户已经存在,Express会在“抛出新错误('user ready exists');”行上抛出以下异常: “未处理的拒
$('#myform').submit(function() {
$.post(window.location.href + 'users/create', { nickname: $('#nick').val() })
.done(function(res) {
// user created successfully
})
.fail(function() {
// user create failed
// show error message
});
return false;
});
room.js-房间模型
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
var roomSchema = new mongoose.Schema({
name: { type: String, required: true, trim: true, index: { unique: true } },
users: [{ type: String, required: true, trim: true }]
});
module.exports = mongoose.model('Room', roomSchema);
room.js-房间路线
var express = require('express');
var jwt = require('jsonwebtoken');
var config = require('../../config');
var Room = require('../models/room');
var router = express.Router();
router.post('/create', function(req, res) {
var promise = Room.findOne({ name: req.roomname }).exec();
promise.then(function(room) {
if (!room) {
var newRoom = Room({
name: req.roomname,
users: []
});
return newRoom.save();
}
return room;
})
.then(function(room) {
if (room.users.indexOf(req.body.nickname) > -1) {
throw new Error('user already exists');
}
room.users.push(req.body.nickname);
return room.save();
})
.then(function(room) {
var token = jwt.sign(req.body.nickname, config.secret);
return res.json({ nickname: req.body.nickname, token: token });
})
.catch(function(err) {
throw err; // I want any errors to bubble back up to the fail() in index.html so I can display a message
});
});
module.exports = router;
对于由于内部处理错误而被视为失败的请求,您应该返回5xx作为响应状态
.catch(函数(err){
res.status(500).json({error:err});
});