型号
const hoursSchema = new Schema({
date: {
type: Date,
required: true,
trim: true,
},
location: {
type: String,
required: true,
trim: true,
minlength: 1,
}
});
module.exports = mongoose.model('Hours', hoursSchema);
路线
router.post('/', (req, res) => {
const body = _.pick(req.body, ['date', 'location']);
const entry = new Hours(body);
res.send(entry);
// rest of code...
});
我发了一个帖子请求,让我们说日期:12 /日期:“12”。 Mongoose将此视为一个时间戳,因为我在日期字段中收到此结果 - 1970-01-01T00:00:00.012Z。我怎么能防止这种情况?当用户以格式yyyy-mm-dd或dd-mm-yyyy发送除日期之外的其他数据时,我想抛出错误
答案 0 :(得分:0)
最简单的方法是使用快速中间件功能并检查那里的合法输入。您已经可以使用名为express-validator的中间件库。它不包含检查合法日期的功能,因此您必须自己制作。
要检查合法日期,您可以使用此功能(来自here):
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Ethernet.begin(mac, ip);
delay(2000);
Serial.println(F("Ready. Press f or r"));
}
char eData(){
doFTP();
delay(15000);
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.println("GET http://www.ervesta.com/index.txt HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
while (client.available()) {
char c1 = client.read();
Serial.print(c1);
}
}
if (!client.connected()) {
client.stop();
// do nothing forevermore:
while (true);
}
return c1;
}
它需要以下格式:YYYY-MM-DD。您可以将它与DD-MM-YYYY的功能结合使用。您可以找到一些示例here。
后置控制器之前的中间件功能:
function isValidDate(value) {
if (!value.match(/^\d{4}-\d{2}-\d{2}$/)) return false;
const date = new Date(value);
if (!date.getTime()) return false;
return date.toISOString().slice(0, 10) === value;
}
该路线将成为:
const dateValidator = [
check('date')
.custom(isValidDate)
.withMessage('the date is illegal')
]
在控制器功能中,您可以从这个检查开始:
router.post('/', dateValidator, (req, res) => {}
如果日期是非法的,用户将收到错误消息。