Я перебуваю на етапах навчання NodeJs, і я бувнамагаючись отримати значення параметрів з json, переданого в URL. Я використовую аналізатор тіла, тому що я бачив багато відповідей на переповнення стека, використовуючи ті самі, щоб проаналізувати дані.
Нижче вказана URL-адреса, яку я проходжу,
http://localhost:1337/login?json={username:rv,password:password}
Я отримую вказану нижче помилку,
SyntaxError: Unexpected token u
at Object.parse (native)
at C:UserssummerDesktopnodejspractise3.njs:14:17
at Layer.handle [as handle_request] (C:UserssummerDesktopnodejsnode_modulesexpresslibrouterlayer.js:95:5)
at next (C:UserssummerDesktopnodejsnode_modulesexpresslibrouterroute.js:131:13)
at Route.dispatch (C:UserssummerDesktopnodejsnode_modulesexpresslibrouterroute.js:112:3)
at Layer.handle [as handle_request] (C:UserssummerDesktopnodejsnode_modulesexpresslibrouterlayer.js:95:5)
at C:UserssummerDesktopnodejsnode_modulesexpresslibrouterindex.js:277:22
at Function.process_params (C:UserssummerDesktopnodejsnode_modulesexpresslibrouterindex.js:330:12)
at next (C:UserssummerDesktopnodejsnode_modulesexpresslibrouterindex.js:271:10)
at jsonParser (C:UserssummerDesktopnodejsnode_modulesbody-parserlibtypesjson.js:100:40)
Код згаданий нижче,
var express = require("express");
var http = require("http");
var app = express();
var bodyparser = require("body-parser");
app.use(bodyparser.json());
app.get("/login",function(req,res,next){
var content = "";
var data = "";
data = req.query.json;
content = JSON.parse(data); //I am getting the error here
res.writeHead(200,{"Content-type":"text/plain"});
res.write(data);
res.end();
});
http.createServer(app).listen(1337);
console.log("Server Started successfully at Port 1337");
Примітка. Прочитавши це запитання, якщо ви знаєте інші варіанти збору значень із даних json, будь ласка, скажіть.
Відповіді:
6 за відповідь № 1Замість цього:
data = req.query.json;
content = JSON.parse(data); //I am getting the error here
Спробуйте для цього:
data = req.query.json;
var stringify = JSON.stringify(data)
content = JSON.parse(stringify);
5 для відповіді № 2
JSON.parse
задихається, оскільки на відміну від Javascript, JSON вимагає, щоб усі імена ключів були в лапках [0], тому ваш JSON повинен бути
{"username":rv,"password":password}
Помилка "Несподіваний маркер u ..." виникає, коли аналізатор JSON стикається з "u" на початку "ім'я користувача", коли він очікував лапки.
[0] На сайті є дуже читабельний підсумок специфікації JSON http://json.org.
-2 для відповіді № 3
Це відбувається тому, що ім'я ключа повинно бути вкладено всередину подвійні лапки. Ось вирішення цієї проблеми:
var jsonObj = eval("(" + YOUR_JSON_STRING + ")");