1
0
mirror of https://github.com/microsoft/TypeScript-Node-Starter.git synced 2026-03-22 06:57:19 +00:00

Update packages, add tests, add type casts (#229)

- upgrade to latest packages
- cast `req.user` as `UserDocument`
- update logger to use latest Winston syntax
- disable `no-inferrable-types`, Mongoose use unified topology

Thx to @CarlosSolrac
This commit is contained in:
CarlosK
2019-09-29 05:31:07 -05:00
committed by Piotr Błażejewicz (Peter Blazejewicz)
parent 53ccb59f93
commit 1098943419
9 changed files with 1532 additions and 1158 deletions

View File

@@ -30,7 +30,7 @@ const app = express();
const mongoUrl = MONGODB_URI;
mongoose.Promise = bluebird;
mongoose.connect(mongoUrl, { useNewUrlParser: true, useCreateIndex: true } ).then(
mongoose.connect(mongoUrl, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true } ).then(
() => { /** ready to use. The `mongoose.connect()` promise resolves to undefined. */ },
).catch(err => {
console.log("MongoDB connection error. Please make sure MongoDB is running. " + err);

View File

@@ -4,7 +4,7 @@ import passportFacebook from "passport-facebook";
import _ from "lodash";
// import { User, UserType } from '../models/User';
import { User } from "../models/User";
import { User, UserDocument } from "../models/User";
import { Request, Response, NextFunction } from "express";
const LocalStrategy = passportLocal.Strategy;
@@ -133,7 +133,8 @@ export const isAuthenticated = (req: Request, res: Response, next: NextFunction)
export const isAuthorized = (req: Request, res: Response, next: NextFunction) => {
const provider = req.path.split("/").slice(-1)[0];
if (_.find(req.user.tokens, { kind: provider })) {
const user = req.user as UserDocument;
if (_.find(user.tokens, { kind: provider })) {
next();
} else {
res.redirect(`/auth/${provider}`);

View File

@@ -2,6 +2,7 @@
import graph from "fbgraph";
import { Response, Request, NextFunction } from "express";
import { UserDocument } from "../models/User";
/**
@@ -19,9 +20,10 @@ export const getApi = (req: Request, res: Response) => {
* Facebook API example.
*/
export const getFacebook = (req: Request, res: Response, next: NextFunction) => {
const token = req.user.tokens.find((token: any) => token.kind === "facebook");
const user = req.user as UserDocument;
const token = user.tokens.find((token: any) => token.kind === "facebook");
graph.setAccessToken(token.accessToken);
graph.get(`${req.user.facebook}?fields=id,name,email,first_name,last_name,gender,link,locale,timezone`, (err: Error, results: graph.FacebookUser) => {
graph.get(`${user.facebook}?fields=id,name,email,first_name,last_name,gender,link,locale,timezone`, (err: Error, results: graph.FacebookUser) => {
if (err) { return next(err); }
res.render("api/facebook", {
title: "Facebook API",

View File

@@ -142,7 +142,8 @@ export const postUpdateProfile = (req: Request, res: Response, next: NextFunctio
return res.redirect("/account");
}
User.findById(req.user.id, (err, user: UserDocument) => {
const user = req.user as UserDocument;
User.findById(user.id, (err, user: UserDocument) => {
if (err) { return next(err); }
user.email = req.body.email || "";
user.profile.name = req.body.name || "";
@@ -178,7 +179,8 @@ export const postUpdatePassword = (req: Request, res: Response, next: NextFuncti
return res.redirect("/account");
}
User.findById(req.user.id, (err, user: UserDocument) => {
const user = req.user as UserDocument;
User.findById(user.id, (err, user: UserDocument) => {
if (err) { return next(err); }
user.password = req.body.password;
user.save((err: WriteError) => {
@@ -194,7 +196,8 @@ export const postUpdatePassword = (req: Request, res: Response, next: NextFuncti
* Delete user account.
*/
export const postDeleteAccount = (req: Request, res: Response, next: NextFunction) => {
User.remove({ _id: req.user.id }, (err) => {
const user = req.user as UserDocument;
User.remove({ _id: user.id }, (err) => {
if (err) { return next(err); }
req.logout();
req.flash("info", { msg: "Your account has been deleted." });
@@ -208,7 +211,8 @@ export const postDeleteAccount = (req: Request, res: Response, next: NextFunctio
*/
export const getOauthUnlink = (req: Request, res: Response, next: NextFunction) => {
const provider = req.params.provider;
User.findById(req.user.id, (err, user: any) => {
const user = req.user as UserDocument;
User.findById(user.id, (err, user: any) => {
if (err) { return next(err); }
user[provider] = undefined;
user.tokens = user.tokens.filter((token: AuthToken) => token.kind !== provider);

View File

@@ -1,15 +1,15 @@
import { Logger, LoggerOptions, transports } from "winston";
import winston from "winston";
const options: LoggerOptions = {
const options: winston.LoggerOptions = {
transports: [
new transports.Console({
new winston.transports.Console({
level: process.env.NODE_ENV === "production" ? "error" : "debug"
}),
new transports.File({ filename: "debug.log", level: "debug" })
new winston.transports.File({ filename: "debug.log", level: "debug" })
]
};
const logger = new Logger(options);
const logger = winston.createLogger(options);
if (process.env.NODE_ENV !== "production") {
logger.debug("Logging initialized at debug level");