Inizializzatore di proprietà abbreviato non valido


165

Ho scritto il seguente codice in JavaScript per un progetto nodo, ma ho riscontrato un errore durante il test di un modulo. Non sono sicuro del significato dell'errore. Ecco il mio codice:

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;

Quando provo a eseguire questo modulo, genera il seguente errore:

$ 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

Non capisco esattamente cosa significhi e cosa posso fare per risolverlo.

Risposte:


443

Poiché è un oggetto, sta usando il modo di assegnare valore alle sue proprietà :.

Modificare =in :per correggere l'errore.

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


1
Consulta i documenti di inizializzazione degli oggetti per imparare come inizializzare i letterali degli oggetti in javascript. Specialmente la sessione chiamata Creazione di oggetti .
Diego Faria,

7
Pensavo che usassi =per memorizzare numeri e :per stringhe mi chiedo dove avresti avuto quell'idea.

2
Arghh! È ora di prendere un caffè. Grazie. :)
ArendE

5

Questo errore si verifica in genere quando si tenta di assegnare un oggetto con segno uguale a (=) anziché due punti (:)

Il codice corretto dovrebbe essere come: -

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

3

Nell'oggetto opzioni hai usato il segno "=" per assegnare valore alla porta ma dobbiamo usare ":" per assegnare valori alle proprietà nell'oggetto quando usi letteralmente l'oggetto per creare un oggetto, ad esempio "{}", queste parentesi graffe. Anche quando usi l'espressione della funzione o crei un oggetto all'interno dell'oggetto devi usare il segno ":". per esempio:

    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);

qui dobbiamo usare le virgole "," dopo ogni proprietà. ma puoi usare un altro stile per creare e inizializzare un oggetto.

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

Usa :invece di=

vedere l'esempio seguente che fornisce un errore

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()
    };

Ciò fornisce l'errore di sintassi: inizializzatore di proprietà abbreviato non valido.

Quindi sostituisco = con :questo risolve questo errore.

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()
    };

-2

C'è un errore di sintassi nella tua optionsinizializzazione variabile. Dovresti usare port: 8080invece di port = 8080.


Questa risposta dovrebbe essere un commento, piuttosto che una risposta :)
Pipetus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.