2015-10-08 26 views
37

Tôi đang cố gắng yêu cầu một tệp và sau đó chuyển nó đến một var. Tôi đang theo dõi hướng dẫn this để tạo hệ thống xác thực. Sau khi viết tệp server.js và cố gắng biên dịch, tôi nhận được một lỗi bson do đó tôi đã thay đổi dòng yêu cầu phiên bản phát hành của nó trong mongoose.NodeJs: TypeError: require (...) không phải là chức năng

Dưới đây là mã của tôi và báo lỗi:

server.js

require('./app/routes')(app, passport); 

Lỗi

require('./app/routes')(app, passport); 
       ^

TypeError: require(...) is not a function 
      at Object.<anonymous> (d:\Node JS learning\WorkWarV2\server.js:38:24) 
      at Module._compile (module.js:434:26) 
      at Object.Module._extensions..js (module.js:452:10) 
      at Module.load (module.js:355:32) 
      at Function.Module._load (module.js:310:12) 
      at Function.Module.runMain (module.js:475:10) 
      at startup (node.js:117:18) 
      at node.js:951:3 

Process finished with exit code 1 

Tôi đã đọc rằng đây thường có nghĩa là yêu cầu JS không được tải đúng cách nhưng tôi không biết tại sao hoặc cách khắc phục nó.

Sửa do bình luận:

Như hỏi, here là kết quả của console.log(require);

+0

Can bạn 'console.log (yêu cầu)' trước dòng không? Bạn không cần requireJS ở phía máy chủ, node.js có một hệ thống mô-đun được tích hợp sẵn (CommonJS, cũng sử dụng hàm 'require'). Có vẻ như đang thay đổi biến 'require' toàn cầu. – kraf

Trả lời

50

Tôi nghĩ rằng điều này có nghĩa rằng module.exports trong mô-đun ./app/routes của bạn không được gán cho là một chức năng, bởi vậy require('./app/routes') do đó không giải quyết được một hàm do đó, bạn không thể gọi nó là một hàm như thế này require('./app/routes')(app, passport).

Hiển thị cho chúng tôi ./app/routes nếu bạn muốn chúng tôi nhận xét thêm về điều đó.

+2

Đúng, đã sửa nó, quên biến nó thành một chức năng ... Thnx. – user1640736

-3

Cài đặt mô-đun bộ nạp tự động đã giải quyết được sự cố của tôi.

npm install autoloader. 

Và sửa đổi mã của bạn như sau .. Từ: require('autoloader').autoload(__dirname + '/src');-require('autoloader')(__dirname + '/src');

Lưu ý: Hãy chắc chắn rằng tên module .. autoload chúng tôi có rất nhiều module ..

8

Đối với tôi, đây là một vấn đề với phụ thuộc cyclic.

IOW, module A mô-đun cần thiết B, và mô-đun B cần mô-đun A.

Vì vậy, trong mô-đun B, require('./A') là một đối tượng rỗng chứ không phải là một hàm.

How to deal with cyclic dependencies in Node.js

-3

Hãy nhớ để xuất khẩu routes.js của bạn.

Trong routes.js, hãy viết các tuyến đường của bạn và tất cả các mã của bạn trong mô-đun chức năng này:

exports = function(app, passport) { 

/* write here your code */ 

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