ค้นหาเว็บไซต์

node.js - nodejs + express: Cors ไม่ใช่ฟังก์ชัน


มันทำงานได้ดีจนถึงเช้าวันนี้ และตอนนี้ จู่ๆ ผมก็ได้รับข้อผิดพลาดประเภทบอกว่า Cors ไม่ใช่ฟังก์ชัน

โค้ดของฉัน

import * as Cors from "cors";
...

const corsOptions: Cors.CorsOptions = {
    allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept", "X-Access-Token", "Authorization"],
    credentials: true,
    methods: "GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE",
    origin: "*",
    preflightContinue: true
};

createConnection(ormConfig).then(async connection => {
    // run pending migrations
    await connection.runMigrations();
    // create express server
    const app = express();
    app.use(bodyParser.json({limit: "50mb"}));
    app.use(bodyParser.urlencoded({limit: "50mb", extended: true}));
    // register cors
    app.use(Cors(corsOptions)); //<---error occurs here
    // register all controllers
    useExpressServer(app, {
        routePrefix: "/api",
        controllers: [
            __dirname + "/controllers/**/*{.js,.ts}"
        ],
        authorizationChecker: async (action: any, roles: string[]) => {
            return JwtAuthorizationMiddleware.checkIsAuthorized(action, roles);
        },
        currentUserChecker: async (actions: any) => {
            return JwtAuthorizationMiddleware.extractUserFromJwtToken(actions);
        }
    });

    // start the express server
    const port: number = +(process.env.PORT || 44320);
    app.listen(port, (err: Error) => {
        console.log(`App listening on port ${port}`);
        console.log("Press Ctrl+C to quit.");
    });
}).catch(error => console.error("TypeORM connection error: ", error));

เวอร์ชันปัจจุบันของ cors และ Node

cors: "^2.8.4"
Node: v8.4.0

การเปลี่ยนแปลงเดียวที่เพิ่งทำไปเมื่อเร็วๆ นี้คือวันศุกร์เมื่อฉันรวมแพ็กเกจต่อไปนี้

multer: "^1.3.0"
@google-cloud/datastore: "^1.1.0"
@google-cloud/storage: "^1.4.0"

และทุกอย่างทำงานได้ดีจนถึงเช้านี้ เวอร์ชันเดียวกันถูกติดตั้งบน gcloud และมันทำงานได้ ดังนั้นฉันจึงสับสนเล็กน้อยว่าทำไมฉันถึงได้รับข้อผิดพลาดนี้กะทันหันและสาเหตุอาจเกิดจากอะไร

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

คำตอบ #1

คุณต้องมีบางสิ่งบางอย่างเช่น

const cors = require('cors');

ในส่วนบนของไฟล์ของคุณ จากนั้นอ้างถึงโมดูลเป็น cors ไม่ใช่ Cors

คำตอบ #2

คุณสามารถอ่านเอกสารเกี่ยวกับ CORS ของ Express เพื่อเรียนรู้เพิ่มเติมได้

ในการใช้งาน CORS กับทุกเส้นทางในโปรเจกต์ของคุณ คุณสามารถเขียนได้ดังนี้:

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

บทความที่เกี่ยวข้อง