Inicializador de propriedade abreviado inválido

165

Eu escrevi o código a seguir em JavaScript para um projeto de nó, mas ocorreu um erro ao testar um módulo. Não tenho certeza do significado do erro. Aqui está o meu código:

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 tento executar este módulo, ele lança o seguinte erro:

$ 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

Não entendi muito bem o que isso significa e o que posso fazer para resolver isso.

Pallab Ganguly
fonte

Respostas:

443

Como é um objeto, está sendo usada a maneira de atribuir valor às suas propriedades :.

Mude =para :para corrigir o erro.

var options = {
  host: 'localhost',
  port: 8080,
  path: '/',
  method: 'POST'
 }
Diego Faria
fonte
Isso funcionou, mas eu pensei que você use = para armazenar números e: para cordas
Pallab Ganguly
1
Consulte Documentos do inicializador de objetos para saber como inicializar literais de objetos em javascript. Especialmente a sessão chamada Criando Objetos .
Diego Faria
7
Pensei que você usasse =para armazenar números e, :para as cordas , imagino onde você teria conseguido essa ideia.
2
Arghh! Hora de tomar um café. Obrigado. :)
ArendE 03/02
5

Esse erro geralmente ocorre quando você tenta atribuir um objeto com sinal de igual a (=) em vez de dois pontos (:)

O código correto deve ser como: -

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

No objeto de opções, você usou o sinal "=" para atribuir valor à porta, mas precisamos usar ":" para atribuir valores às propriedades no objeto ao usar o literal de objeto para criar um objeto, ou seja, "{}", esses colchetes. Mesmo quando você usa a expressão da função ou cria um objeto dentro do objeto, é necessário usar o sinal ":". por exemplo:

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

aqui temos que usar vírgulas "," após cada propriedade. mas você pode usar outro estilo para criar e inicializar um objeto.

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
r.jain
fonte
1

Use em :vez de=

veja o exemplo abaixo que dá um erro

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

Isso fornece o erro Syntex: inicializador de propriedade abreviado inválido.

Então eu substituo = com :isso resolve este erro.

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

Há um erro de sintaxe na optionsinicialização da variável. Você deve usar em port: 8080vez de port = 8080.

Mahesa daniswara
fonte
Esta resposta deve ser um comentário, e não uma resposta :)
Pipetus