123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 | var mongoose = require('mongoose');var express = require('express');var bodyParser = require('body-parser');const {ObjectID} = require('mongodb');var _ = require('lodash');const validator = require('validator');const jwt = require('jsonwebtoken');//appvar app = express();const port = process.env.PORT || 3000;//express middleware Jonson对象与字符串转换。app.use(bodyParser.json());//mongoose.Promise = global.Promise;//连接mogodbmongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/TodoApp');//模版var Todo = mongoose.model('Todo',{ text:{ type:String, //类型 required:true, //必须要有 minlength:1, //最小长度 trim:true //去除空格 }, completed:{ type:Boolean, default:false //默认值 }, completedAt:{ type:Number, default:null }});var UserSchema = new mongoose.Schema({ email: { type: String, required: true, trim: true, minlength: 1, unique: true, validate: { validator: validator.isEmail, message: '{VALUE} is not a valid email' } }, password: { type: String, require: true, minlength: 6 }, tokens: [{ access: { type: String, required: true }, token: { type: String, required: true } }]});UserSchema.methods.toJSON = function () { var user = this; var userObject = user.toObject(); return _.pick(userObject, ['_id', 'email']);};UserSchema.methods.generateAuthToken = function () { var user = this; var access = 'auth'; var token = jwt.sign({_id: user._id.toHexString(), access}, 'abc123').toString(); user.tokens = user.tokens.concat([{access,token}]); return user.save().then(() => { return token; //返回token });};var User = mongoose.model('User', UserSchema);//express routeapp.post('/todos',(req,res)=>{// console.log(req.body); //建立对象document var todo = new Todo({ text:req.body.text }); //保存 todo.save().then((doc)=>{ res.send(doc); },(e)=>{ res.status(400).send(e); });})//获取所有属性app.get('/todos', (req, res) => { Todo.find().then((todos) => { res.send({todos}); }, (e) => { res.status(400).send(e); })});//查询idapp.get('/todos/:id', (req, res) => { var id = req.params.id; if (!ObjectID.isValid(id)) { return res.status(404).send(); } Todo.findById(id).then((todo) => { if (!todo) { return res.status(404).send(); } res.send({todo}); }).catch((e) => { res.status(400).send(); });});//删除app.delete('/todos/:id', (req, res) => { var id = req.params.id; if (!ObjectID.isValid(id)) { return res.status(404).send(); } Todo.findByIdAndRemove(id).then((todo) => { if (!todo) { return res.status(404).send(); } res.send({todo}); }).catch((e) => { res.status(400).send(); });});//更新app.patch('/todos/:id', (req, res) => { var id = req.params.id; var body = _.pick(req.body, ['text', 'completed']); if (!ObjectID.isValid(id)) { return res.status(404).send(); } if (_.isBoolean(body.completed) && body.completed) { body.completedAt = new Date().getTime(); } else { body.completed = false; body.completedAt = null; } Todo.findByIdAndUpdate(id, {$set: body}, {new: true}).then((todo) => { if (!todo) { return res.status(404).send(); } res.send({todo}); }).catch((e) => { res.status(400).send(); })});// POST /usersapp.post('/users', (req, res) => { var body = _.pick(req.body, ['email', 'password']); var user = new User(body); user.save().then(() => { return user.generateAuthToken(); //调用方法,产生auth token并保存。 }).then((token) => { res.header('x-auth', token).send(user); //设置了响应头 }).catch((e) => { res.status(400).send(e); })});//监听app.listen(port,()=>{ console.log(`Start on port ${port}`);});module.exports = { app, Todo} |