Express会话:“会话&会话"类型上不存在“登录"属性部分< SessionData>".(2339) [英] Express Session: Property 'signin' does not exist on type 'Session & Partial<SessionData>'. (2339)

查看:43
本文介绍了Express会话:“会话&会话"类型上不存在“登录"属性部分< SessionData>".(2339)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到以下错误代码:类型会话&部分< SessionData>".(2339)

I got following Error Code: Property 'signin' does not exist on type 'Session & Partial<SessionData>'. (2339)

src/index.ts

import "reflect-metadata";
import express = require("express");
import { Request, Response, NextFunction } from "express"
import http = require("http");
import * as bodyParser from "body-parser";
import * as cookieParser from "cookie-parser";
import * as session from "express-session";
var debug = require('debug')('rkdemo:server');


// configure App 
const app = express();
var port = normalizePort(process.env.PORT || '3000');
var server = http.createServer(app);
app.set('port', port);
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: false }));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({ secret: 'krunal', resave: false, saveUninitialized: true, }));


app.all("/", function (req, res) {
    res.status(200).send("Hello World")
});

app.get("/signin", (req, res) => {
    req.session.signin = true 
    res.send("Login complete")
})

app.get("/signout", (req, res) => {
    req.session.destroy((err)=>{
        if (err){
            res.status(500).send(err)
        }else{
            res.send("Session destroyed")
        }
    })
})

app.get("/secret", (req, res) => {
    if(req.session.signin){
        res.send("You are in Ford Knox")
    }else{
        res.status(401).send('You have to stay outside')
    }
})

server.listen(port, function () {
    console.log('Example app listening on port: ' + port);
});
server.on('error', onError);
server.on('listening', onListening);

function normalizePort(val) {
    var port = parseInt(val, 10);
    if (isNaN(port)) {
        return val;
    }
    if (port >= 0) {
        return port;
    }
    return false;
}


/**
 * Event listener for HTTP server "error" event.
 */
function onError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }

    var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port;

    // handle specific listen errors with friendly messages
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
}


/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
    debug('Listening on ' + bind);
}

我的配置

package.json


{
  "name": "session_test",
  "version": "0.0.1",
  "description": "Awesome project developed with TypeORM.",
  "devDependencies": {
    "@types/node": "^8.0.29",
    "ts-node": "3.3.0",
    "typescript": "3.3.3333"
  },
  "dependencies": {
    "@types/express": "^4.17.9",
    "@types/express-session": "^1.17.3",
    "bcrypt": "^5.0.0",
    "body-parser": "^1.19.0",
    "cookie-parser": "^1.4.5",
    "express": "^4.17.1",
    "express-fileupload": "^1.2.0",
    "express-session": "^1.17.1",
    "http": "0.0.1-security",
    "jsonwebtoken": "^8.5.1",
    "mysql": "^2.14.1",
    "reflect-metadata": "^0.1.10",
    "request": "^2.88.2",
    "shortid": "^2.2.16",
    "typeorm": "0.2.29",
    "validator": "^13.5.1",
    "validatorjs": "^3.21.0"
  },
  "scripts": {
    "start": "ts-node src/index.ts"
  }
}

tsconfig.json


{
    "compilerOptions": {
       "lib": [
          "es5",
          "es6"
       ],
       "target": "es5",
       "module": "commonjs",
       "moduleResolution": "node",
       "outDir": "./build",
       "emitDecoratorMetadata": true,
       "experimentalDecorators": true,
       "sourceMap": true
    }
 }

我怎么了?

推荐答案

这仅仅是因为您使用的是TS,而在 req.session 下未定义属性 singin ,类型为 Session&部分< SessionData> .

It's simply because you are using TS and propterty singin isn't defined under req.session, which is of type Session & Partial<SessionData>.

为此,您可以利用声明合并,结帐

To achieve that, you can take advantage of Declaration Merging, checkout DefinitelyTyped/types/express-session/index.d.ts. In your case just create a file src/types/index.d.ts and attach the the following:

export {};

declare module 'express-session' {
    interface SessionData {
        singin: boolean
    }
}

这篇关于Express会话:“会话&amp;会话"类型上不存在“登录"属性部分&lt; SessionData&gt;".(2339)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆