我有一个简单的聊天应用程序。在index.html中,我有一个带有id" nick"的输入的表单。当我提交此表单时,如果此用户在聊天室中已经存在,我想创建一个用户。如果用户确实存在(或者存在其他错误),我希望能够显示有用的错误消息。
我在这里列出了执行此操作的3段代码。
我想使用$ post.fail()在index.html中处理用户创建中的任何错误。我怎样才能做到这一点?按照目前的情况,如果用户已经存在,Express会在行上抛出以下异常"抛出新错误('用户已存在');":
"未处理拒绝错误:用户已存在于c:\ Users \ Matt \ Documents \ code \ chat \ app \ routes \ room.js:24:19"
这是否意味着我应该在某处调用Promise.reject()?是否有一种返回错误的标准方法,以便$ post.fail()?
捕获它们的index.html
$('#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;
答案 0 :(得分:0)
对于因内部处理错误而被视为失败的请求,您应返回5xx作为响应状态。
.catch(function(err) {
res.status(500).json({ error: err });
});

https://www.ietf.org/rfc/rfc2616.txt
10.5服务器错误5xx
以数字" 5"开头的响应状态代码表明案件 服务器知道它有错误或无法执行 执行请求。除了响应HEAD请求时, 服务器应该包括一个包含对的解释的实体 错误情况,以及是暂时的还是永久的 条件。用户代理应该显示任何包含的实体到
用户。这些响应代码适用于任何请求方法。