Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何移动到多个json对象中_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何移动到多个json对象中

Javascript 如何移动到多个json对象中,javascript,node.js,express,Javascript,Node.js,Express,我用js编写了一个登录页面代码,在node express.js服务器上运行,任何人都可以将用户名/电子邮件和密码以及所有数据放入json文件,如下所示 {"username":"admin","password":"pasword","email":"user@stackoverflow.com","timestamp":1598668572045,&qu

我用js编写了一个登录页面代码,在node express.js服务器上运行,任何人都可以将用户名/电子邮件和密码以及所有数据放入json文件,如下所示

{"username":"admin","password":"pasword","email":"user@stackoverflow.com","timestamp":1598668572045,"_id":"dx8HqKkVWe8olH5z"}
我设法得到了时间戳,NeDB给了这个对象一个随机的id。 当你登录时,你会进入一个像这样的主页

但是,当数据库上只有on对象时,用户会获得用户名值,即“database.json” 如果数据库中有多个对象,则该操作将崩溃,并且客户端无法看到其名称或任何内容,则该操作不会显示任何内容。 我不知道如何使它与数据库中的几个对象一起工作。 我认为JSON.parse或stringfy可以让它工作,但我不知道如何在我的案例中使用它们。 下面是js代码

var jsonn = '/database.json';

async function userinfo() {
    
    const response = await fetch(jsonn);
    const data = await response.json();
    var { username, password } = data;
    
    
    document.getElementById('user').textContent = username;
    
    
    console.log (data)
    console.log (username);
    console.log (id);
}

userinfo();
我感谢你的帮助,如果你有任何想法,请与我分享我真的需要你的帮助

更新: 错误消息显示: 未捕获(承诺中)语法错误:json位置126中的未预期标记

my server.js代码:

const Datastore=require('nedb');
app.listen(2000,()=>console.log('listening at 3000');
app.use(express.static('/public'));
app.use(express.json({
限制:“1mb”
}));
const database=new Datastore('public/database.json');
loadDatabase();
app.post(“/public”,(请求、响应)=>{
const data=request.body;
const timestamp=Date.now();
data.timestamp=时间戳;
数据库。插入(数据);
json(数据);
控制台日志(数据);
var logdate=新日期;
控制台日志(logdate);

});调用DB insert的方式存在一些问题。基本上,对于每个post请求,您都允许插入。这会导致多个用户使用相同的用户名。当你通过用户名搜索用户时,你会得到一堆用户。相反,您需要下面的示例代码

我删除了status public以便于测试,因此请确保将其重新添加,以便可以测试前端代码。现在只有一个GET请求端点,因此您可以通过查询按用户名获取数据。这需要更多的清理和检查,但至少会让你开始。此外,我还从响应中删除了密码和DB_id,因为这是您不想发回的probs数据。理想情况下,您将在将密码存储到数据库之前对其进行加密

const express = require('express');
const app = express();
const Datastore = require('nedb');
app.listen(3000, () => console.log('listening at 3000'));
app.use(express.json({
    limit: '1mb'
}));
const database = new Datastore('public/database.json');
database.loadDatabase();

app.get('/public', (req, res) => {
  const { username } = req.query;
  database.findOne({
    username,
  }, (err, user) => {
    if(err) {
      return res.sendStatus(500);
    }
    delete user._id;
    delete user.password;

    return res.json(user);
  });
});

app.post('/public', (req, res) => {
    const data = req.body;
    const {
      username
    } = data;

    database.findOne({ 
      username,
    }, (err, user) => {
      if(err) {
        return res.sendStatus(500);
      }
      if(user) {
        delete newUser._id;
        delete newUser.password;
        return res.json(user) 
      }

      data.timestamp = Date.now();
      database.insert(data, (createError, newUser) => {
        if(createError) {
          return res.sendStatus(500);
        }
        delete newUser._id;
        delete newUser.password;
        res.json(newUser);
      });
    });
});

在服务器中,您是否根据用户提供的数据查询数据库?如果是这样,用户数据需要是唯一的,否则您将根据查询数据库的方式获得一个数组。根据上面的描述,您似乎返回了所有的database.json,它似乎是一个数组,这就是为什么在尝试从数据中解构用户名、密码参数时失败的原因。如果您提供了实际的错误消息和返回的示例database.json输出,那么我们将能够提供更多帮助。我将更新错误消息以及服务器如何在上面的帖子中查询数据库您是否尝试更新,
textContent
innerHTML
它甚至无法控制台。记录数据以便我知道问题是当一个新对象进入数据库时,我只需要一种读取多个对象的方法“我想”我稍后会处理错误,但我可以从控制台获取数据库,我可以看到这一点,但我不想更改服务器代码,因为它是客户端代码问题它不能读取超过1个json对象,所以我想如果您不想更改服务器代码,我会给每个用户一个个人数据库。然后,通过解析前端返回的数据数组,获得与用户名匹配的第一个元素。const userArr=data.find(val=>val.username==username);然后抓取第一个元素,并从中解构数据。var{username,password}=userArr[0]。在抓取第一个元素之前,确保检查userArr上是否有任何元素。干杯感谢您在这方面的帮助,我将尝试第二种解决方案,它似乎很适合。