2012-12-22 25 views
8

Tôi mới tham gia phần tiếp theo và Node.js.
Tôi được mã hóa để kiểm tra phần tiếp theo, nhưng đã xảy ra lỗi "ER_NO_SUCH_TABLE: Bảng 'db.node_tests' không tồn tại"
Lỗi rất đơn giản.
Tuy nhiên, tôi muốn nhận dữ liệu từ bảng "node_test".
Tôi nghĩ rằng phần tiếp theo của nhân vật phụ.phần tiếp theo cho Node.js: ER_NO_SUCH_TABLE

Có mã nguồn của tôi.

var Sequelize = require('sequelize'); 

var sequelize = new Sequelize('db', 'user', 'pass'); 
var nodeTest = sequelize.define('node_test', 
     { uid: Sequelize.INTEGER 
     , val: Sequelize.STRING}); 

nodeTest.find({where:{uid:'1'}}) 
    .success(function(tbl){ 
     console.log(tbl); 
    }); 

Tôi đã tạo bảng "node_test" và chèn dữ liệu bằng ứng dụng mysql.

Tôi có hiểu nhầm cách sử dụng không?

+0

Tôi đang sử dụng Mysql 5.5.28/phần tiếp theo 1.6.0-beta4/Node.js 0.8.15. –

Trả lời

9

Tôi đã tìm thấy câu trả lời cho câu hỏi của riêng mình.

Tôi đã nối thêm tùy chọn Phương thức tuần tự sau. {define:{freezeTableName:true}}

Sau đó, phần tiếp theo không gắn thêm 'ký tự' sau tên bảng.

3

Theo mặc định, việc sử dụng theo mặc định là số nhiều của tên kiểu được truyền. Vì vậy, nó sẽ tìm bảng "node_tests" hoặc "NodeTests". Ngoài ra nó có thể tạo bảng cho bạn nếu bạn muốn điều đó.

nodeTest.sync().success(function() { 
    // here comes your find command. 
}) 

Đồng bộ sẽ cố gắng tạo bảng nếu nó chưa tồn tại. Bạn cũng có thể thả bảng hiện tại và tạo một bảng mới từ đầu bằng cách sử dụng sync({ force: true }). Kiểm tra các lệnh SQL trên dòng lệnh của bạn để biết thêm chi tiết về những gì đang diễn ra.

+0

Cảm ơn câu trả lời hữu ích của bạn. :) –

+0

bạn được chào đón. cho tôi biết nếu bạn cần thêm thông tin. – sdepold

+0

chỉ là một bên không: mô-đun 'dresende/node-orm2' đã cho tôi cùng một' Lỗi: ER_NO_SUCH_TABLE' ... bạn cần phải gọi 'sync()' lần đầu tiên, trước khi thêm dữ liệu. –

2

Mặc dù câu trả lời hoạt động độc đáo, tôi hiện nay khuyến cáo sử dụng các tùy chọn tableName khi tuyên bố mô hình:

sequelize.define('node_test', { 
    uid: Sequelize.INTEGER, 
    val: Sequelize.STRING 
}, { 
    tableName: 'node_test' 
}); 

http://sequelizejs.com/documentation#models-configuration

+1

Cảm ơn bạn đã trả lời câu hỏi mới. Tôi sẽ thử nó. :) –

+0

@sdepold Bạn có thể muốn cập nhật liên kết đến tài liệu. –

1

Khi bạn xác định một mô hình để một bảng hiện tại, bạn cần phải đặt hai tùy chọn cho phần tiếp theo để:

  1. tìm tên bảng của bạn như nó vốn có
  2. không băn khoăn về cột mặc định sequelize của updatedAtcreatedAt rằng họ hy vọng.

Chỉ cần thêm cả hai lựa chọn như vậy:

var nodeTest = sequelize.define('node_test', 
     { uid: Sequelize.INTEGER , val: Sequelize.STRING}, 
     { freezeTableName: true , timestamps: false} //add both options here 
); 

Lưu ý tùy chọn tham số:

sequelize.define('name_of_your_table', 
    {attributes_of_your_table_columns}, 
    {options} 
    ); 

Thiếu một trong hai tùy chọn gây nên lỗi tương ứng khi sử dụng phương pháp sequelize như nodeTest. findAll().

> ER_NO_SUCH_TABLE //freezeTableName 
> ER_BAD_FIELD_ERROR //timestamps 

Ngoài ra, bạn có thể:

  1. tạo một bảng tươi qua sequelize. Nó sẽ thêm "s" vào tên bảng và tạo hai cột dấu thời gian làm mặc định hoặc
  2. sử dụng sequelize-auto, gói npm tuyệt vời để tạo mô hình tiếp theo từ cơ sở dữ liệu hiện có của bạn theo lập trình.

Đây là phần tiếp theo documentation cho cấu hình tùy chọn.

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