2017-03-27 16 views
5

Tôi chỉ đang cố đọc một tệp bằng cách sử dụng fs.readFileSync, mặc dù có vẻ như không thể tìm thấy tệp này.Sử dụng số f trong số

Tôi chắc chắn phải khai báo nó, thêm vào nó trong constructor của tôi:

export default class Login extends React.Component<LoginProps, {}> { 
    private webAuth: auth0.WebAuth; 
    fs: any; 

    constructor(props: any, context: any) { 
     super(props, context); 
     this.fs = require('fs'); 
     this.webAuth = new auth0.WebAuth({ 
      clientID: conf.auth0.clientId, 
      domain: conf.auth0.domain, 
      responseType: 'token id_token', 
      redirectUri: `${window.location.origin}/login` 
     }); 
    } 
[...] 

Và sử dụng nó trong một chức năng đơn giản:

verifyToken = (token) => { 

    console.log(this.fs); 
    let contents = this.fs.readFileSync('../utils/public.key', 'utf8'); 
    console.log(contents); 

} 

Nhưng điều này đặt ra một Uncaught TypeError: _this.fs.readFileSync is not a function. Có cách nào đặc biệt để bao gồm fs trong Typescript?

+2

thành phần 'Đăng nhập' của bạn là thành phần trình duyệt, phải không? Tại sao bạn đang cố gắng sử dụng module 'fs'? – Diullei

+0

Nếu bạn đang sử dụng wepback, bạn có thể yêu cầu nội dung tập tin bằng cách sử dụng 'raw-loader'. –

Trả lời

16

Đầu tiên. Tôi không thể tưởng tượng bất kỳ trường hợp nào trong đó bạn sẽ sử dụng fs bên trong một thành phần React. Mặc dù bạn có thể sử dụng React trong máy chủ để hiển thị nội dung, cùng một mã được cho là chạy trong ứng dụng khách, không có cách nào bạn có thể truy cập fs trong ứng dụng khách.

Nếu bạn muốn sử dụng fs trong máy chủ, đây là một ví dụ:

import * as fs from 'fs'; 
fs.readFile(path.join(__dirname, '../../client/index.html'), 'utf8', (error, data) => { 
     // ... 
    }) 

Mở tập tin package.json của bạn, hãy chắc chắn để có một sự phụ thuộc vào nút

"dependencies": { 
"@types/node": "^7.0.5" 
} 

Và đây là cách tệp tsconfig.json của tôi trông giống như:

{ 
    "compilerOptions": { 
     "outDir": "./dist/", 
     "sourceMap": true, 
     "noImplicitAny": true, 
     "module": "commonjs", 
     "target": "es5", 
     "jsx": "react", 
     "allowJs": true, 
     "typeRoots": [ 
      "./node_modules/@types" 
     ] 
    }, 
    "include": [ 
     "./db/**/*", 
     "./src/**/*" 
    ] 
} 
+1

'' 'fs''', trong trường hợp của tôi, được sử dụng để mở tệp chứa khóa công khai Auth0, được sử dụng để xác minh mã thông báo jwt. Tôi vẫn còn khá mới với React, cảm ơn lời khuyên! –

Các vấn đề liên quan