Trình khởi tạo thuộc tính tốc ký không hợp lệ


166

Tôi đã viết đoạn mã sau trong JavaScript cho một dự án nút, nhưng tôi đã gặp lỗi trong khi kiểm tra một mô-đun. Tôi không chắc lỗi này có nghĩa gì. Đây là mã của tôi:

var http = require('http');
// makes an http request
var makeRequest = function(message) {
 var options = {
  host: 'localhost',
  port = 8080,
  path : '/',
  method: 'POST'
 }
 // make request and execute function on recieveing response
 var request = http.request(options, function(response) {
  response.on('data', function(data) {
    console.log(data);
  });
 });
 request.write(message);
 request.end();
}
module.exports = makeRequest;

Khi tôi cố chạy mô-đun này, nó sẽ báo lỗi sau:

$ node make_request.js
/home/pallab/Desktop/make_request.js:8
    path = '/',
    ^^^^^^^^^^
SyntaxError: Invalid shorthand property initializer
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3

Tôi hoàn toàn không hiểu điều này có nghĩa là gì và tôi có thể làm gì để giải quyết vấn đề này.

Câu trả lời:


443

Bởi vì nó là một đối tượng, cách gán giá trị cho các thuộc tính của nó đang sử dụng :.

Thay đổi =để :để khắc phục lỗi.

var options = {
  host: 'localhost',
  port: 8080,
  path: '/',
  method: 'POST'
 }

Điều đó đã làm việc, nhưng tôi nghĩ bạn sử dụng = để lưu trữ số và: cho chuỗi
Pallab Ganguly

1
Xem các tài liệu khởi tạo đối tượng để tìm hiểu cách khởi tạo các đối tượng bằng chữ trong javascript. Đặc biệt phiên gọi là Tạo đối tượng .
Diego Faria

6
Tôi nghĩ bạn sử dụng =để lưu trữ số và :cho chuỗi Tôi tự hỏi bạn sẽ lấy ý tưởng đó ở đâu.

2
Arghh! Thời gian để lấy một ly cà phê. Cảm ơn. :)
ArendE

5

Lỗi này thường xuất hiện khi bạn cố gắng gán một đối tượng có dấu Bằng (=) thay vì dấu hai chấm (:)

Mã chính xác phải như sau: -

var options = {
  host: 'localhost',
  port: 8080,
  path: '/',
  method: 'POST'
 }

3

Trong đối tượng tùy chọn, bạn đã sử dụng dấu "=" để gán giá trị cho cổng nhưng chúng ta phải sử dụng ":" để gán giá trị cho các thuộc tính trong đối tượng khi sử dụng đối tượng bằng chữ để tạo đối tượng tức là "{}", các dấu ngoặc nhọn này. Ngay cả khi bạn sử dụng biểu thức hàm hoặc tạo một đối tượng bên trong đối tượng, bạn phải sử dụng dấu ":". ví dụ:

    var rishabh = {
        class:"final year",
        roll:123,
        percent: function(marks1, marks2, marks3){
                      total = marks1 + marks2 + marks3;
                      this.percentage = total/3 }
                    };

john.percent(85,89,95);
console.log(rishabh.percentage);

ở đây chúng ta phải sử dụng dấu phẩy "," sau mỗi thuộc tính. nhưng bạn có thể sử dụng một kiểu khác để tạo và khởi tạo một đối tượng.

var john = new Object():
john.father = "raja";  //1st way to assign using dot operator
john["mother"] = "rani";// 2nd way to assign using brackets and key must be string

1

Sử dụng :thay vì=

xem ví dụ dưới đây có lỗi

app.post('/mews', (req, res) => {
if (isValidMew(req.body)) {
    // insert into db
    const mew = {
        name = filter.clean(req.body.name.toString()),
        content = filter.clean(req.body.content.toString()),
        created: new Date()
    };

Điều đó mang lại cho Syntex Error: trình khởi tạo tốc ký không hợp lệ.

Sau đó, tôi thay thế = bằng cách :giải quyết lỗi này.

app.post('/mews', (req, res) => {
if (isValidMew(req.body)) {
    // insert into db
    const mew = {
        name: filter.clean(req.body.name.toString()),
        content: filter.clean(req.body.content.toString()),
        created: new Date()
    };
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.